2014-09-26 198 views
0

我是新来的LINQ 我收到此错误无法隐式转换类型“System.Collections.Generic.List <AnonymousType#1>”到“System.Collections.Generic.List

无法隐式转换键入 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

您是否试图从方法返回匿名类型的列表?据我所知,这是被禁止的。 – undefined 2014-09-26 12:40:58

+1

不要从方法返回具体类型的匿名类型。因此,在这种情况下,创建一个类“DssClient”并返回一个“List ”或“IEnumerable ”是有意义的。 – 2014-09-26 12:41:05

+0

您正在返回'List ',其中T是编译器为您的选择生成的匿名类型,而您的方法需要'List ' – 2014-09-26 12:42:02

回答

3

SELECT子句:

select new 
{ 
    ... 
} 

是选择一个匿名类型。您需要它来选择DssClient_Sasid_Certified,以便您可以返回您的方法声明中说您要返回的类型。您可能只需要更改您的代码:

select new DssClient_Sasid_Certified 
{ 
    ... 
} 

...假设DssClient_Sasid_Certified拥有所有你设置当然属性。

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参数的构造函数,并且您正在使用您的匿名对象的属性是一样的DssClient_Sasid_Certified

从原始查询该行:

select new ..... 

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

了解更多关于匿名类型这里: http://msdn.microsoft.com/en-us/library/bb397696.aspx

1

错误消息指出它clearly.Your返回类型为List<DssClient_Sasid_Certified>,但你试图返回匿名types.So列表类型做的比赛,他们是不兼容的。您需要创建类型的实例而不是匿名类型:

select new DssClient_Sasid_Certified { .. } 
相关问题