优化两个List <t>对象,组和计数的LINQ连接</t>

时间:2014-08-13 20:38:23

标签: c# c#-4.0 linq-to-objects

我有两个List对象。我想要计算两个列表之间匹配的项目数。现在,当我遇到比赛时,我可以通过计数器进行循环......但那会有点蹩脚。

然而,这个正在扩展我的LINQ知识。我相信我想要做的是加入,辨别(在哪里),分组和计算计数。我通过阅读类似的SO问题和LINQ文档来实现这种方法。

然而,如果这种方式存在缺陷,那么它并不一定是这样。我只想要匹配元素的数量。

所以我的&#34;主人&#34;对象是:

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.

任何帮助整理将不胜感激。此外,如果我需要发布更多代码,请告诉我。 谢谢

3 个答案:

答案 0 :(得分:2)

对于intersect

来说非常有用
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();