gpt4 book ai didi

c# - (C# LINQ) 使用电子邮件选择名字和姓氏

转载 作者:行者123 更新时间:2023-11-29 11:13:03 24 4
gpt4 key购买 nike

我对 LINQ 和 SQL 查询非常陌生,我已经在互联网上搜索了大约 2 个小时,现在试图找到我的问题的答案,这就是我在这里发帖的原因。

我正在尝试使用我知道其值的用户电子邮件地址在 LINQ 查询中获取用户的名字和姓氏。

一个例子是:

using (userEntities db = new userEntities())
{
var query = from o db.Users
where o.email == userEmail
select o;

if (query.SingleOrDefault() != null)
{
...
}
}

这仅选择电子邮件地址,那么我如何使用该行并获取名字和姓氏?

提前谢谢您。

最佳答案

您有一个 db 对象,它有一个名为 Users 的序列,其中序列中的每个元素都是一个 User,该 User 具有名为 email 的属性。

显然每个用户还有另外两个属性:firstName 和lastName。

在 linq 中,每当您有一系列“thingies”并且您只需要与某个谓词匹配的“thingies”时,您就可以使用函数Where,就像您所做的那样。

如果您有一系列“thingie”,并且对于每个“thingie”,您希望基于原始“thingie”创建一个“其他事物”,则可以使用“选择”功能。将一个输入元素转换为一个输出元素在 Linq 中称为投影。使用 Select 功能,您可以将输入序列的每个元素投影(转换)为输出序列的一个元素

因此,如果您想使用您的事物的名字和姓氏创建一个“其他事物”,请执行以下操作:

class UserName
{
public string firstName {get; set;}
public string lastName {get; set;
}
var result = db.Users
.Where(user => user.email == useremail)
.Select(user => new UserName()
{
FirstName = user.FirstName,
LastName = user.LastName,
});

我获取与 userEmail 匹配的每个用户,并创建一个 UserName 类的新对象,其中包含每个用户的名字和姓氏。

上面使用的方法意味着对于要在 Select 语句中使用的每个投影,您都必须定义一个类。这是相当麻烦的,特别是如果您只想在非常有限的空间中使用语句的结果,例如仅在创建新对象的过程中。

如果您不必将查询结果传递给其他函数,而只需要在该函数中使用它(更准确地说:不需要形式参数),则不必声明 UserName 类。您可以使用匿名类型。匿名类型可以进行选择,而无需定义您要投影到的类型:

var matchingUserNames = db.Users
.Where(user => user.email == useremail)
.Select(user => new
{
FirstName = user.FirstName,
LastName = user.LastName,
});
foreach (var matchingUserName in matchingUserNames)
{
Console.WriteLine(matchingUserName.FirstName + ' '
+ matchingUserName.LastName);
}

请注意,我省略了类的名称。所以你不能将结果传递给具有类型名称的东西。事实上,您现在唯一关心的结果是它是一个对象序列,其中每个对象都有两个属性:FirstName 和 LastName。 FirstName 与 user.FirstName 具有相同的类型; LastName 与 use.LastName 具有相同的类型

对于匿名类型,请参阅 the joy of anonymous types

另一篇帮助我理解 linq 的文章是 The standard Linq operators

关于c# - (C# LINQ) 使用电子邮件选择名字和姓氏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40199894/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com