选择带有linq的列表



我在一个数据库中有2个表,一个类在c# (Letter)。

Tables: tblUser(Id, Name), tblLetter(Id, UserId, Title)

信件:(Id, Title, UserName)

我想用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();

:

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

但是得到这个错误:

不能隐式转换类型…

正如@SnowYetis评论的那样,您实际上是在代码中选择了一个新的匿名类型的实例。这就是语法new { ... }的作用。注意,new指令后面没有类型名。

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

如果没有,那么我们可能需要更多的信息,例如,Letter类型的定义。

您的代码中有几个问题:

  • l.tblLetter.ToList()返回表中的所有记录。你通常不调用ToList(),直到你的查询结束,得到只是你需要的数据,而不是更多。

  • 你想在两个表之间做一个连接来获得匹配的用户名

  • 如果你想返回Letter的集合,你可以在你的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();

相关内容

  • 没有找到相关文章

最新更新