无法隐式转换类型';System.Collections.Generic.List<;匿名类型#1>

本文关键字:类型 lt List gt Generic System 转换 Collections | 更新日期: 2023-09-27 18:24:34

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

无法隐式转换类型';System.Collections.Generic.List<;匿名类型#1>

您的select子句:

select new 
{
    ...
}

正在选择匿名类型。您需要它来选择一个DssClient_Sasid_Certified,这样您就可以返回方法声明所说的要返回的类型。您可能只需要将代码更改为:

select new DssClient_Sasid_Certified
{
    ...
}

当然,假设DssClient_Sasid_Certified具有您正在设置的所有属性。

您的方法应该返回DssClient_Sasid_Certified的列表,但您的linq查询正在创建一个anon类型。

你可以做一些类似的事情:

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_Certificationd 相同

原始查询中的行:

select new .....

基本上说,给我创建一个新的匿名类型,匿名类型无法自动转换为非匿名类型(DssClient_Sasid_Certified列表)。

在此处阅读有关匿名类型的更多信息:http://msdn.microsoft.com/en-us/library/bb397696.aspx

错误消息清楚地说明了这一点。您的返回类型是List<DssClient_Sasid_Certified>,但您正试图返回匿名类型列表。因此,不匹配的类型是不兼容的。您需要创建您类型的实例,而不是匿名类型:

select new DssClient_Sasid_Certified { .. }