C# 如何使用LINQ获取在一个属性中不同的项列表?

C# 如何使用LINQ获取在一个属性中不同的项列表?,c#,linq,C#,Linq,我正在尝试获取具有以下特征的项目列表。我需要突出显示那些仅因“item_Different”字段不同的项目。因此,我编写了以下代码来查找所需的记录。这段代码确实适用于我正在寻找的内容,但我想知道是否有更聪明的方法(行数更少,性能更好,或者有) 任何评论都将不胜感激。我认为这将返回相同的结果,但: 我认为这会返回相同的结果,但: 另一种方法是使用分组方式对项目1至5进行第一次分组。(其可维护性优势在于在标准中定义一次这些属性),然后检查组中是否存在item6\u差异 var Pair_off_it

我正在尝试获取具有以下特征的项目列表。我需要突出显示那些仅因“item_Different”字段不同的项目。因此,我编写了以下代码来查找所需的记录。这段代码确实适用于我正在寻找的内容,但我想知道是否有更聪明的方法(行数更少,性能更好,或者有)


任何评论都将不胜感激。

我认为这将返回相同的结果,但:


我认为这会返回相同的结果,但:


另一种方法是使用
分组方式
对项目1至5进行第一次分组。(其可维护性优势在于在标准中定义一次这些属性),然后检查组中是否存在
item6\u差异

var Pair_off_items = from p in MyItemList
    group p by new {p.item1, p.item2, p.item3, p.item4, p.item5} into g
    where g.GroupBy(f=>f.item6_differ).Count() > 1
    from p in g
    select p;

在上面的查询中,
g
将包含具有相同项目1到5的所有项目。有多种方法可以检查组是否包含不同的item6值。上面使用了第二个groupby,但您可以使用其他选项。e、 g.
其中g.Select(f=>f.item6_different)。Distinct().Count()>1
也应该起作用,同样应该
让first=g.first()。item6_different其中g.Any(f=>f.item6_different!=first)
另一种方法是使用
分组by
对第1项到第5项进行第一组。(其可维护性优势在于在标准中定义一次这些属性),然后检查组中是否存在
item6\u差异

var Pair_off_items = from p in MyItemList
    group p by new {p.item1, p.item2, p.item3, p.item4, p.item5} into g
    where g.GroupBy(f=>f.item6_differ).Count() > 1
    from p in g
    select p;


在上面的查询中,
g
将包含具有相同项目1到5的所有项目。有多种方法可以检查组是否包含不同的item6值。上面使用了第二个groupby,但您可以使用其他选项。e、 g.
其中g.Select(f=>f.item6_different)。Distinct().Count()>1
也应该起作用,因为
让first=g.first().item6_在g.Any(f=>f.item6_different!=first)中不同。

顺便说一句:
where
-where-子句对我来说似乎很复杂,为什么不简单地使用
其中p.Item1==f.Item1==f.Item1&&……
?创建一个匿名类型,以便将其属性与另一个类型的另一个实例进行比较(该实例共享相同的属性,使其在语义上完全相同)这有点奇怪。另一个问题是,它的性能会比简单地测试每个属性的性能差吗?您认为检查匿名特性的平等性会做什么?它还比较了该类型的每个属性。同意,我想我需要获得ILSpy。顺便说一句:
where
-子句对我来说非常复杂,为什么不简单地使用
其中p.Item1==f.Item1&&…
?创建一个匿名类型,以便将其属性与另一个类型的另一个实例进行比较(该实例共享相同的属性,使其在语义上完全相同)这有点奇怪。另一个问题是,它的性能会比简单地测试每个属性的性能差吗?您认为检查匿名特性的平等性会做什么?它还比较了该类型的每个属性。同意,我想我需要得到我的ILSpy。哇,这一接受来得真快…@HimBromBeere:是的,老实说,我不确定它是否返回相同的结果,但OP的查询似乎无缘无故过于复杂,而且连接总是存在的,特别是在Linq-to-Objects中。嗯,这是因为我在脑子里有同样的想法,不确定它是更有效率的。无论如何,你可以考虑自己检查每一个属性,而不是依赖匿名类型检查。我觉得新{…}的
有违直觉,但这可能是我个人的观点。@HimBromBeere:我完全同意。谢天谢地,这种接受来得真快…@HimBromBeere:是的,说实话,我不确定它是否返回相同的结果,但OP的查询似乎无缘无故地过于复杂,而且连接总是存在的,特别是在Linq-to-Objects中。嗯,那是因为我有相同的想法,不确定它是否更有效率。无论如何,你可以考虑自己检查每一个属性,而不是依赖匿名类型检查。我觉得新{…}
有违直觉,但这可能是我个人的观点。@HimBromBeere:我完全同意。谢谢
var Pair_off_items = from p in MyItemList
    group p by new {p.item1, p.item2, p.item3, p.item4, p.item5} into g
    where g.GroupBy(f=>f.item6_differ).Count() > 1
    from p in g
    select p;