LINQ嵌套查询具有适当的量词和限制

时间:2018-02-09 09:52:35

标签: c# linq

我有两张桌子A& B如下:

表A

W X Y
1 7 5
2 0 7
3 1 7
4 4 4
5 4 7

表B

Q Z C D
1 1 7 5
2 1 0 7
3 1 1 7
4 1 4 4

我想获得W和X的价值。 Y组合与C& C组合完全匹配表B中的D为Z = 1。

我尝试过以下查询:

var query = A.Where(u =>
                       B.Where(a => a.Z == 1)
                        .Select(a => a.C)
                        .Contains(u.X))
              .Where(u =>
                       B.Where(a => a.Z == 1)
                       .Select(a => a.D)
                       .Contains(u.Y))
               .Select(a => new { WIds = a.W });

所以在上面的例子中,查询结果应该给出:W = {1,2,3,4}但是我也得到5的额外值。 W = {1,2,3,4,5}。我认为它不是整体考虑组合。任何人都可以帮助我在这个查询中做错了什么?

3 个答案:

答案 0 :(得分:0)

你能试试吗?

 var query = A.Where(a =>
                       B.Any(b => b.Z == 1 && a.X == b.C && a.Y == b.D))
               .Select(a => new { WIds = a.W });

答案 1 :(得分:0)

您可以使用Any执行此操作: -

var result = A.Where(x =>
                        B.Any(p => p.Z == 1 && p.C == x.X && p.D == x.Y)
                     )
              .Select(x => x.W);

Fiddle

答案 2 :(得分:0)

问题是,您只是检查当前X是否与任何C匹配,而当前Y是否与任何D匹配,而不是将它们作为一组进行匹配。您可以使用更简单的查询来执行此操作:

var query = A
    .Where(a => B.Any(b => b.Z == 1 && b.C == a.X && b.D == a.Y))
    .Select(a => new { WIds = a.W });