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