我有两个List对象。我想要计算两个列表之间匹配的项目数。现在,当我遇到比赛时,我可以通过计数器进行循环......但那会有点蹩脚。
然而,这个正在扩展我的LINQ知识。我相信我想要做的是加入,辨别(在哪里),分组和计算计数。我通过阅读类似的SO问题和LINQ文档来实现这种方法。
然而,如果这种方式存在缺陷,那么它并不一定是这样。我只想要匹配元素的数量。
所以我的"主人"对象是:
public class Master
{
public StringModel OldText { get; private set; }
public StringModel NewText { get; private set; }
public Master()
{
OldText = new StringModel();
NewText = new StringModel();
}
}
StringModel是:
public class StringModel
{
public List<strPiece> Lines { get; private set; }
public StringModel()
{
Lines = new List<strPiece>();
}
}
到目前为止,我的LINQ是:
var unchangedJoin = from oldLine in Master.OldText.Lines
join newLine in Master.NewText.Lines
on oldLine.Type equals newLine.Type
where oldLine.Type == "ABC"
group oldLine by --as you can see I kinda break down here.
任何帮助整理将不胜感激。此外,如果我需要发布更多代码,请告诉我。 谢谢
答案 0 :(得分:2)
var infoQuery =
(from cust in db.Customers
select cust.Country)
.Intersect
(from emp in db.Employees
select emp.Country)
;
答案 1 :(得分:1)
只需执行GroupJoin
而不是Join
。
var unchangedJoin = from oldLine in Master.OldText.Lines
join newLine in Master.NewText.Lines
on oldLine.Type equals newLine.Type
into newMatches
where oldLine.Type == "ABC"
select oldLine;
var matches = unchangedJoin.Count();
答案 2 :(得分:0)
我也会推荐Intersect
。如果你这样做,使用流利的语法更有意义。
int matches = Master.OldText.Lines
.Where(line => line.Type == "ABC")
.Intersect(Master.NewText.Lines)
.Count();