Linq查询类型相等无法弄清楚

时间:2015-07-27 21:28:54

标签: linq


我在项目中使用Linq查询,我无法修复查询之间的匿名类型错误。因为我不能为此制作一个特定的类我决定在查询中转换为相同的类型,但是我坚持这个部分无法使两个部分相等

(from x in db.table
from d in db.table2
from c in db2.table
select new {
property = (x.property == 0) ?
((d.property == null) ? 0 :  d.property ) :
((c.property == null) ? 0 : c.property )}).distinct()

&安培;在另一个查询

from x in db.table
select new
{ property = 0 }

我需要的是我的查询之间的联合,但我不能使两个部分相等 所以我可以同时使用这两个结果var query = part1.union(part2)

编辑我不确定我是否省略了声明属性被声明为十进制具有任何重要性

编辑
找到了一个解决方案,我将小数转换为双倍

(from x in db.table
from d in db.table2
from c in db2.table
select new {
property = (x.property == 0) ?
((d.property == null) ? 0 :  d.property ) :
((c.property == null) ? 0 : c.property )}).distinct()

&在另一个查询中

from x in db.table
select new
{ property = 0.000 }


&那么我转换的价值是第二部分

(from x in db.table
    from d in db.table2
    from c in db2.table
    select new {
    property = (x.property == 0) ?
    ((d.property == null) ? 0 :  double.parse(d.property.ToString()) ) :
    ((c.property == null) ? 0 : double.parse(c.property.ToString()) )}).distinct()

编辑
由于某种原因,问题仍然存在,就像转换不是&# 39;工作(匿名错误) 更新4.0

   var query_1 = (from d in ogcc.table
                     from adh in vclt.table
                     from a in vclt.table
                     where
                         stuff
                     select new
                     {
                         tx_int = "0" //the that keeps the anonymous error
                     }).Distinct();
    //union
    var query_2 = from d in prtf.table
                    from c in prtf.table
                    from a in vclt.table.Where(a => (c.num_credit == a.no_dos_adh || c.ref_cred == a.no_dos_adh)) //left join
                    where
                        stuff
                    select new
                    {
                        tx_int = prtf.Stored_Procedure(c.num_credit).ToString(),
                    };

更新+简化的查询代码
其中只有一个保留了错误&我无法修复它 我尝试将这两个转换为字符串,但错误仍然存​​在

1 个答案:

答案 0 :(得分:1)

由于您正在检查,例如d.property == null,我假设dNullable<>,因此您希望使用其.Value属性,以便“重新使用int代替int?

select new {
property = (x.property == 0) ?
((d.property == null) ? 0 :  d.property.Value ) :
((c.property == null) ? 0 : c.property.Value )}