当其中一种数据类型可以为空而另一种不能为空时,是不是可以使用 linq 进行匿名连接? [复制]
Posted
技术标签:
【中文标题】当其中一种数据类型可以为空而另一种不能为空时,是不是可以使用 linq 进行匿名连接? [复制]【英文标题】:Is there anyway anonymous joins using linq may be performed when one of the datatypes is nullable and the other isn't? [duplicate]当其中一种数据类型可以为空而另一种不能为空时,是否可以使用 linq 进行匿名连接? [复制] 【发布时间】:2021-12-22 15:50:38 【问题描述】:如果这个问题已经被问过,那么请引导我到 SO 链接,这样我可以避免上当受骗。但我找不到任何可以直接回答问题的内容。
我有以下场景
var result = (from a in table1
join b in table2
on a.column equals b.column
join c in table3
on b.column equals c.column
join d in table4
on new a.column2, c.column2
equals d.column3, d.column6
select a);
问题是 table3 的 column2 和 table4 的 column6 都是 int 类型,但 1 可以为空,而另一个不是,这导致“连接子句中的一个表达式的类型不正确强>”
我理解错误,但我的问题;有没有办法解决?还是我只是在尝试使用 linq 达到我需要的结果的死胡同?
我试图通过使用可为空类型的 Value 属性来使连接工作,但这不起作用。如果没有其他方法可以使用 linq 实现此目的,那么我将不得不将所有代码移动到 SPROC 中的 SQL 中,而我不想这样做。
我注意到我可以在匿名声明之外执行连接,而 linq 对此没有任何问题;但我需要一个复合连接。
谢谢
【问题讨论】:
【参考方案1】:您需要在匿名类型标签中给出属性,并且标签必须相同。然后,您可以将不可为空的int
转换为可空的int
。
var result = (from a in table1
join b in table2
on a.column equals b.column
join c in table3
on b.column equals c.column
join d in table4
on new JoinColumn1 = a.column2, JoinColumn2 = (int?)c.column2
equals JoinColumn1 = d.column3, JoinColumn2 = d.column6
select a);
【讨论】:
谢谢,这正是我所需要的。很抱歉这个被骗的问题。以上是关于当其中一种数据类型可以为空而另一种不能为空时,是不是可以使用 linq 进行匿名连接? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
检查数组是否为空而不获取NullPointerException
我有一种形式可以更新mysql中的某些值,当输入为空时,如何避免更新单元格?