我有两张桌子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}。我认为它不是整体考虑组合。任何人都可以帮助我在这个查询中做错了什么?
答案 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);
答案 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 });