使用Union的匿名类型错误

时间:2016-12-16 14:00:48

标签: c# linq

我正在尝试使用Union,我的变量类型是十进制的。我得到以下例外:

  

实例参数:无法转换为&#39; System.Linq.IQueryable<AnonymousType#1>&#39;到&#39; System.Linq.ParalelQuery<AnonymousType#2>&#39;


代码:

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

2 个答案:

答案 0 :(得分:5)

错误消息告诉您确切的问题所在。您无法将一种匿名类型转换为另一种类型。

你有这个作为你的第一个选择陈述:

select new { lI, lI.abc }

这是你的第二个:

select new { lI, R.Quantity }

这些产生两个不同的对象,第一个有lI加上一个字符串。第二个是&#39; lI`和一个数值。

试试这个:

select new { lI, lI.abc, 0 }

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

答案 1 :(得分:3)

只要类型相同,您就可以Union两个匿名类型。这包括字段名称。在您的情况下,第一种类型是{lI, abc},第二种类型是{lI, Quantity},因此合并它们将无效。您需要决定一个名称, - Quantityabc或完全不同的名称。

假设它们的类型已经相同,那么为两个字段赋予相同的名称将解决问题:

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