【发布时间】:2014-06-06 00:52:45
【问题描述】:
我对 C# 和 Linq 还是很陌生,在查询两个表的匹配值时遇到了一些麻烦。
在我作为实习生工作的地方,我们使用工作单元存储库模式。例如,要查询一个 sql 表,我会使用这个 linq 表达式:_entities.Atable.Where(x => x.Col1 == col1 && x.Col2 == col2)。 _entities 变量代表数据库模型中所有表的接口。
假设我有两个表Table1 和Table2。以下是每个表的列:
Table1: Col1, Col2, colA, ColB
Table2: Col1, col2, ColC, ColD
这是我想做的:
-
通过将两个变量 col1 和 col2 与 Col1 和 Col2 匹配来查询
Table1。例如,
List1 = _entities.Table1.Where(x => x.Col1 == col1 && x.Col2 == col2).ToList() -
然后,查询
Table2以获取Table2.Col1和Table2.Col2匹配List1.Col1和List1.Col2的任何记录。这些结果也可以存储在一个列表中,List2。例如,
List2 = _entities.Table2.Where(x => x.Col1 == List1.Col1 && x.Col2 == List1.Col2).ToList() - 然后,创建第三个列表
List3,其中包含来自Table1的所有项目与来自Table2的项目不匹配
最后,我想要一个Table2 项目列表,这些项目与Col1 和Col2 匹配Table1。以及在Table2 中没有匹配的剩余Table1 项目的列表。
大多数情况下,我停留在第三个要点上,但我愿意接受任何建议和改进。
最后,我不知道这是否可能,我想将这两个列表合并为一个。由于它们是不同的类型,我不确定这将如何工作。
我希望这一切都有意义。我一直在努力解决它一段时间,但我仍然对如何创建查询感到困惑。我也玩过Except() 和Intersect(),但运气不佳。
任何帮助将不胜感激。
【问题讨论】:
-
试试 'Difference()' 而不是 'Except()'?
-
好的,我会开始研究它。谢谢。
-
您是否要进行左内连接?