【问题标题】:Cannot implicitly convert type 'System.Collections.Generic.List<AnonymousType#1>' to 'System.Collections.Generic.List无法将类型“System.Collections.Generic.List<AnonymousType#1>”隐式转换为“System.Collections.Generic.List”
【发布时间】:2014-09-26 12:39:00
【问题描述】:

我是 LINQ 的新手 我收到此错误

不能隐式转换类型 System.Collections.Generic.List&lt;AnonymousType#1&gt;System.Collections.Generic.List&lt;DirCert.Data.Model.DssClient_Sasid_Certified&gt;

我不知道如何解决这个错误。

这是我的代码:

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

【问题讨论】:

  • 你是否试图从一个方法中返回一个匿名类型的列表?据我所知,这是被禁止的。
  • 不要从方法返回匿名类型,而是具体类型。所以在这种情况下,创建一个类DssClient 并返回一个List&lt;DssClient&gt;IEnumerable&lt;DssClient&gt; 是有意义的。
  • 您正在返回 List&lt;T&gt; 其中 T 是编译器为您的选择生成的匿名类型,而您的方法需要 List&lt;DssClient_Sasid_Certified&gt;
  • 您必须使用具体类型或从您的方法中返回 List&lt;object&gt;

标签: c# linq


【解决方案1】:

你的选择子句:

select new 
{
    ...
}

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

select new DssClient_Sasid_Certified
{
    ...
}

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

【讨论】:

    【解决方案2】:

    您的方法应该返回 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 的无参数构造函数,并且您在匿名对象中使用的属性与您的 DssClient_Sasid_Certified 相同

    原始查询中的行:

    select new .....
    

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

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

    【讨论】:

      【解决方案3】:

      错误消息清楚地说明了。您的返回类型是List&lt;DssClient_Sasid_Certified&gt;,但您正在尝试返回匿名类型列表。所以类型确实匹配,它们不兼容。您需要创建类型的实例而不是匿名类型:

      select new DssClient_Sasid_Certified { .. }
      

      【讨论】:

        猜你喜欢
        • 2015-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-14
        • 1970-01-01
        • 2011-05-14
        • 2013-05-15
        相关资源
        最近更新 更多