使用linq选择列表

时间:2014-03-17 20:08:19

标签: c# linq

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

表: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});

但得到此错误:

  

无法隐式转换类型...

2 个答案:

答案 0 :(得分:3)

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

如果您的Letter类型包含IdTitleUserName属性,那么您需要做的就是将new { ... }更改为new Letter { ... }

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

答案 1 :(得分:2)

您的代码中存在一些问题:

  • 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();