【问题标题】:Anonymous Type Error using Union使用联合的匿名类型错误
【发布时间】:2016-12-16 22:11:29
【问题描述】:

我正在尝试使用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 });

【问题讨论】:

  • 您选择的答案(从以下 2 个答案中)取决于 abc 的类型。

标签: c# linq


【解决方案1】:

错误消息准确地告诉您问题所在。您不能将一种匿名类型转换为另一种。

这是您的第一个选择语句:

select new { lI, lI.abc }

这是你的第二个:

select new { lI, R.Quantity }

它们产生了两个不同的对象,第一个对象有 lI 加上一个字符串。第二个有“lI”和一个数值。

试试这个:

select new { lI, lI.abc, 0 }

和:

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

【讨论】:

【解决方案2】:

你可以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 });

【讨论】:

    猜你喜欢
    • 2019-06-01
    • 1970-01-01
    • 2014-02-24
    • 1970-01-01
    • 1970-01-01
    • 2018-03-28
    • 2011-10-08
    • 2010-10-14
    • 1970-01-01
    相关资源
    最近更新 更多