Linq和多个Where's

时间:2009-09-04 19:20:52

标签: linq where-clause

我正在尝试查看是否有一种方法可以构建一个Linq语句,该语句将基于元素中的可用属性进行选择,结果将是什么,尽管并非所有属性始终可用。

例如,这将是一个“标准”元素:

<box left="2" right="2" />

然而,这也是完全有效的:

<box left="3" />

而且:

<box right="1.4" />

我想要做的是有一个Linq语句,说“如果左右两者都存在,添加它们除以2.如果只剩下,则使用该值。如果只有权利,则使用该值。 ”。我知道这可以通过一系列复杂的If / Then语句来完成,但我试图看看是否可以在Linq中完成。

我已经尝试过一些东西,但是我遇到了返回值的问题 - 如何返回真实的那个。例如,以下内容返回值,但不一定是真值:

dim center = from e in <box> Where e.@left IsNot Nothing _
AndAlso e.@right IsNot Nothing _
let g = ((CInt(e.@left)+CInt(e.@right)) /2) _
Or _
e.@left IsNot Nothing AndAlso e.@right Is Nothing _
let k = CInt(e.@left)

我尝试过使用select语句,但它并没有完全正常工作。有关如何做到这一点的任何想法?

1 个答案:

答案 0 :(得分:2)

使用If表达式:

Dim center = From e In <box> _
             Where If(e.@left IsNot Nothing AndAlso e.@right IsNot Nothing, _
                      (CInt(e.@left) + CInt(e.@right)) / 2, _
                      If (e.@left IsNot Nothing, _
                          CInt(e.@left), _
                          CInt(e.@right)))