2016-12-16 134 views
3

我想使用Union和我的变量类型是十进制。我得到以下异常:匿名类型错误使用联盟

实例参数:无法从 'System.Linq.IQueryable<AnonymousType#1>' 转换为 'System.Linq.ParalelQuery<AnonymousType#2>'


和代码:

queryResults = (from lI in Entities.LI 
       select new { lI, lI.abc }) 
       .Union(from lI in Entities.LI 
          from R in Entities.RL 
          where lI.oid == R.lIOid 
          select new { lI, R.Quantity }); 
+0

您选择(从下面的2答案)答案将取决于什么ABC的类型。 – Joe

回答

3

您可以根据Union两个匿名类型,只要它们的类型是相同的。这包括字段名称。在你的情况下,第一种类型是{lI, abc},第二种是{lI, Quantity},所以合并它们将不起作用。你需要决定一个名字, - Quantity,abc,或者完全不同的东西。

给予这两个领域相同的名称将解决这个问题,假设它们的类型已经是相同的:

queryResults = (from lI in Entities.LI 
      select new { lI, Quantity = lI.abc }) // <<== Added "Quantity =" 
      .Union(from lI in Entities.LI 
         from R in Entities.RL 
         where lI.oid == R.lIOid 
         select new { lI, R.Quantity }); 
+1

谢谢你它正在工作:) – Ilaria

+0

@莓是的,这正是它的工作原理。谢谢! – dasblinkenlight

5

该错误消息告诉你到底是什么问题。您不能将一个匿名类型转换为另一个。

你有这个作为你的第一个select语句:

select new { lI, lI.abc } 

,并以此作为你的第二个:

select new { lI, R.Quantity } 

这些都是产生两个不同的对象,第一有什么lI是外加一个字符串。第二个有'lI`和一个数字值。

试试这个:

select new { lI, lI.abc, 0 } 

和:

select new { lI, "", R.Quantity } 
+0

如果数据类型相同,它不会工作吗?在http://stackoverflow.com/questions/16947761/create-a-new-anonymous-type-list-to-union-onto-existing-anonymous-type-list? – stuartd

+1

@stuartd,是的,它应该。我只是添加一个可能的解决方案。 – ChrisF