无法将类型'System.Collections.Generic.List <anonymoustype#1>'隐式转换为'System.Collections.Generic.List </anonymoustype#1>

时间:2014-09-26 12:39:00

标签: c# linq

我是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();
}

3 个答案:

答案 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 { .. }
相关问题