我是LINQ的新手 我收到此错误
无法隐式转换类型
System.Collections.Generic.List<AnonymousType#1>
来System.Collections.Generic.List<DirCert.Data.Model.DssClient_Sasid_Certified>
我无法弄清楚如何解决这个错误。
这是我的代码:
public List<DssClient_Sasid_Certified> GetCertifiedRecordsbySasid(string Sasid)
{
return (from o in _context.DssClient_Sasid_Certified
where (o.SasId == Sasid)
join t in _context.DssClients on o.ClientId equals t.ClientId
select new
{
ClientId = o.ClientId,
SasId = o.SasId,
FormalLastName = o.FormalLastName,
FormalFirstName = o.FormalFirstName,
FormalMiddleName = o.FormalMiddleName,
BenefitSource = t.BenefitSource,
DOB = o.DOB
}).ToList();
}
答案 0 :(得分:3)
您的选择条款:
select new
{
...
}
正在选择匿名类型。您需要它来选择DssClient_Sasid_Certified
,以便您可以返回您的方法声明表明您将要返回的类型。您可能只需将代码更改为:
select new DssClient_Sasid_Certified
{
...
}
...假设DssClient_Sasid_Certified
具有您正在设置的所有属性。
答案 1 :(得分:1)
您的方法应该返回一个DssClient_Sasid_Certified列表,但您的linq查询正在创建一个匿名类型。
您可以执行以下操作:
public List<DssClient_Sasid_Certified> GetCertifiedRecordsbySasid(string Sasid)
{
return (from o in _context.DssClient_Sasid_Certified
where (o.SasId == Sasid)
join t in _context.DssClients
on o.ClientId equals t.ClientId
select new DssClient_Sasid_Certified()
{
ClientId = o.ClientId,
SasId = o.SasId,
FormalLastName = o.FormalLastName,
FormalFirstName = o.FormalFirstName,
FormalMiddleName = o.FormalMiddleName,
BenefitSource = t.BenefitSource,
DOB = o.DOB
}).ToList();
}
这当然假设您的对象具有DssClient_Sasid_Certified的无参数构造函数,并且您在anon对象中使用的属性与您的DssClient_Sasid_Certified相同
原始查询中的行:
select new .....
基本上说,创建一个新的匿名类型,匿名类型无法自动转换为非匿名类型(您的DssClient_Sasid_Certified列表)。
在此处阅读有关匿名类型的更多信息: http://msdn.microsoft.com/en-us/library/bb397696.aspx
答案 2 :(得分:1)
错误消息明确说明。您的返回类型为List<DssClient_Sasid_Certified>
,但您尝试返回匿名类型列表。因此类型不匹配,它们不兼容。您需要创建类型的实例而不是匿名类型:
select new DssClient_Sasid_Certified { .. }