C# 使用linq选择列表

C# 使用linq选择列表,c#,linq,C#,Linq,我在一个数据库中有两个表,一个类是C字母 表:tblUserId、Name、tblLetterId、UserId、Title 字母:Id、标题、用户名 我希望使用linq选择数据,并使用以下代码: List<Letter> lst = new List<Letter>(); lst = (from l in l.tblLetter.ToList() select new {l.Id, l.Title, UserName = l.tblUser.Name}

我在一个数据库中有两个表,一个类是C字母

表:tblUserId、Name、tblLetterId、UserId、Title

字母:Id、标题、用户名

我希望使用linq选择数据,并使用以下代码:

List<Letter> lst = new List<Letter>();
lst = (from l in l.tblLetter.ToList() 
       select new {l.Id, l.Title, UserName = l.tblUser.Name}
      ).ToList();
以及:

但是得到这个错误:

无法隐式转换类型


作为@SnowYetis注释,您实际上是在代码中选择一个新的匿名类型的实例。这就是新语法{…}的作用。请注意,在新指令之后没有类型名称

如果您的字母类型具有属性Id、Title、UserName,那么您需要做的就是将new{…}更改为new Letter{…}


如果没有,那么我们可能需要比您提供的更多的信息,例如,字母类型的定义。

您的代码中有一些问题:

l、 ToList返回表中的所有记录。通常在查询结束之前都不会调用ToList,以获取所需的数据,而不是更多

您希望在两个表之间进行联接以获得匹配的用户名

如果要返回字母集合,可以在select语句中创建该字母集合的实例,而不是创建匿名类型

试试这个:

var lst = (from l in l.tblLetter
           join u in tblUser on l.UserId equals u.Id
           select new Letter
           {
               Id = l.Id,
               Title = l.Title,
               UserName = u.Name
           }).ToList();

发布完整异常。这是因为您返回的是匿名类型。因此,它无法将返回的类型转换为字母。@AnaMah您是否试图使用列表,因为您希望从Linq查询中获得强类型列表对象?我不希望使用var类型。我有选择的数据和列表将填补。实际上,var根本不是一种类型!在本例中,它是列表的简写。您可以键入List lst=from。。。完整,但生成的代码是相同的。如果确实需要填充现有列表,请省略.ToList并将linq查询的结果分配给IEnumerable。然后调用list.addRangeMeyEnumerable,如@grantwiney所示。
var lst = (from l in l.tblLetter
           join u in tblUser on l.UserId equals u.Id
           select new Letter
           {
               Id = l.Id,
               Title = l.Title,
               UserName = u.Name
           }).ToList();