我在一个数据库中有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();