2013-03-22 30 views
0

我有一个特定的场景,我想用LINQ来解决,但我被卡住了。我希望有人能给我一个例子或一些关于如何解决这个问题的指针。我对LINQ相当陌生。Linq可能出现AND/OR情况的解决方案吗?

我有一个包含相同类型的(什么样的对象并不重要的例子)的对象两个集合。

集合A中包含 'A11' 和 'A12'。

集合B包含 'B11' 和 'B12'。

我的第三个集合应该包含根据以下规则上面的一个子元素:

(1 element of B AND (A11 OR A12)) 

所以,如果我写了所有的可能性,这将成为:

(B11 AND (A11 OR A12)) 

(B12 AND (A11 OR A12)) 

Ofcourse在我的情景中,这些集合可能变得更大。

我将如何解决这个问题的LINQ,看看我的收藏℃,依据的是具体的和/或规则是正确的?

+0

不能确定你的意思。你想从'Collection A'中得到随机元素吗? – MarcinJuraszek 2013-03-22 08:41:55

+0

你可以写一些代码示例,你已经尝试过吗?你是否希望得到的集合与第一个集合的类型相同? – 2013-03-22 08:42:10

+0

你能描述你的输入和输出并给出一个真实的例子吗?这对理解你的问题会有帮助。 – 2013-03-22 08:44:51

回答

2

你可以把它分成两个独立的LINQ查询,并结合他们

if(collectionC.Intersect(collectionA).Any() && collectionC.Intersect(collectionB).Any()) 

时collectionC至少包含一个从collectionA和collectionB

至少一个,如果你想要更多的控制这将是真实的对数,您可以用

每个集合取代

.Any() 

在交叉操作0

Count() > 0 

更多信息 http://code.msdn.microsoft.com/LINQ-Set-Operators-374f34fe#intersect1

+0

为什么在第一个查询中使用'Any',第二个中使用'Count()> 0'?他们做同样的事情,但是Any()更有效率。 – MarcinJuraszek 2013-03-22 09:01:40

+0

错过它重构我的回答(现在更新):) 任何会更快,但如果你想拥有的不仅仅是数可以为有用的N> = 1 – finman 2013-03-22 09:34:53