C# 如何使用LINQ调整结果?

C# 如何使用LINQ调整结果?,c#,entity-framework,linq,C#,Entity Framework,Linq,从这个LINQ: var inspectionItems = inspArchive.Select(x => x.InspectionItems); 我在inspectionItems中得到此结果: 我的问题是如何以优雅的方式使用LINQ使从inspectionItems得到的结果超过一个由Id区分的数组 就像这样: 在看不到更多代码的情况下,我想您应该使用SelectMany和Distinct var inspectionItems = inspArchive.SelectMany(

从这个LINQ:

var inspectionItems = inspArchive.Select(x => x.InspectionItems);
我在inspectionItems中得到此结果:

我的问题是如何以优雅的方式使用LINQ使从inspectionItems得到的结果超过一个由Id区分的数组

就像这样:


在看不到更多代码的情况下,我想您应该使用
SelectMany
Distinct

var inspectionItems = inspArchive.SelectMany(x => x.InspectionItems).Distinct();

在没有看到更多代码的情况下,我想您应该使用
SelectMany
Distinct

var inspectionItems = inspArchive.SelectMany(x => x.InspectionItems).Distinct();

问题不清楚,但请检查这是否适用于您:

var inspectionItems = inspArchive.SelectMany(x => x.InspectionItems)
                                 .GroupBy(x => x.ID)
                                 .Select(g => g.First())
                                 .ToArray();

问题不清楚,但请检查这是否适用于您:

var inspectionItems = inspArchive.SelectMany(x => x.InspectionItems)
                                 .GroupBy(x => x.ID)
                                 .Select(g => g.First())
                                 .ToArray();
您需要LINQ方法:

var inspectionItems = inspArchive.SelectMany(x => x.InspectionItems);
如果您只需要特定属性的不同项,则可以实现相等比较器以查看检查类是否相等,然后在方法链末尾调用
.distinct(myInspectionEqualityComparer)
,也可以执行以下操作:

var distinctInspectionItems = inspArchive.SelectMany(x => x.InspectionItems)
                                         .GroupBy(i => i.Id)
                                         .Select(group => group.First());
您需要LINQ方法:

var inspectionItems = inspArchive.SelectMany(x => x.InspectionItems);
如果您只需要特定属性的不同项,则可以实现相等比较器以查看检查类是否相等,然后在方法链末尾调用
.distinct(myInspectionEqualityComparer)
,也可以执行以下操作:

var distinctInspectionItems = inspArchive.SelectMany(x => x.InspectionItems)
                                         .GroupBy(i => i.Id)
                                         .Select(group => group.First());

(尽管我认为distinct的语法需要其他东西?)事实上,distinct没有将
Func
作为参数。您需要实现一个相等比较器,或者使用
GroupBy
Select
。或者只使用
Distinct()
,不带参数,希望您的类型已经可以比较/etc,以使内置的Distinct工作正常?不,
.Distinct()
本身使用
对象。GetHashCode()
来比较项目,这在他只想检查ID的情况下不起作用。这就是为什么我没有说“实现可比较”,我说的是“已经可比较/etc以使内置的不同工作”。如果他的底层类型实现为
GetHashCode
as
return this.Id.hashCode()
或其他内容,这可能会起作用。这是一个很长的过程,但你永远不知道。(虽然我认为distinct的语法需要其他东西?)事实上,distinct没有将
Func
作为参数。您需要实现一个相等比较器,或者使用
GroupBy
Select
。或者只使用
Distinct()
,不带参数,希望您的类型已经可以比较/etc,以使内置的Distinct工作正常?不,
.Distinct()
本身使用
对象。GetHashCode()
来比较项目,这在他只想检查ID的情况下不起作用。这就是为什么我没有说“实现可比较”,我说的是“已经可比较/etc以使内置的不同工作”。如果他的底层类型实现为
GetHashCode
as
return this.Id.hashCode()
或其他内容,这可能会起作用。这很难实现,但您永远不知道。当使用
.Distinct()
时,将应用默认的相等比较器,该比较器使用
GetHashCode()
。这不会仅基于ID返回不同的结果。当使用
.distinct()
时,将应用默认的相等比较器,该比较器使用
GetHashCode()
。这不会仅基于ID返回不同的结果。