我在数据库中有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});
但得到此错误:
无法隐式转换类型...
答案 0 :(得分:3)
在@SnowYetis评论中,您实际上是在代码中选择一个新的匿名类型的实例。这就是new { ... }
语法的作用。请注意,new
指令后没有类型名称。
如果您的Letter
类型包含Id
,Title
,UserName
属性,那么您需要做的就是将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();