获取包含此子对象

时间:2017-05-16 13:43:58

标签: c# linq

我有一个没有约束的数据库,并且没有在表之间定义外键。我使用Linqpad,但在我的Linqpad中,我没有此数据库的导航属性。

我想这样做

Order_Sub_Items.GroupBy(x => x.Order_Item_Id)
.Where(y => y.Items.Sub_Item_Id != y.Items.First().Sub_Item_Id)

所以,用英语:我想得到我所有的Order_Sub_Items,对于同一个Order_Item_Id我有不同的Sub_Item_Id。

所以我的想法是按Order_Sub_Items进行分组,然后对于我的组中的每个项目,我将Sub_Item_Id与我的第一个元素的Sub_Item_Id进行比较。

查询无效,因为我无法访问Items。为什么?当我只运行第一部分时:

Order_Sub_Items.GroupBy(x => x.Order_Item_Id)
Linqpad中的

我在2列上看到结果没有问题。钥匙和物品。

enter image description here

2 个答案:

答案 0 :(得分:0)

我想我找到了解决方案

Order_Sub_Items
.GroupBy(x => x.Order_Item_Id)
.ToList()
.Where(x => x.Any(y => y.Sub_Item_Id != x.First().Sub_Item_Id)

或来自图片

Order_Sub_Items.Take(100)
.GroupBy(x => x.Order_Item_Id.Value)
.ToList()
.Where(x => x.Any(y => y.Sub_Item_Id.Substring(0, 11) != x.First().Sub_Item_Id.Substring(0, 11)))

答案 1 :(得分:0)

当您使用GroupBy执行Linq操作时,您将获得以下结果:

  

类型:System.Collections.Generic.IEnumerable< IGrouping< TKey,TElement>>   IEnumerable< IGrouping< TKey,TElement>>在Visual Basic中的C#或IEnumerable(Of IGrouping(Of TKey,TElement))中,每个IGrouping< TKey,TElement> object包含TElement类型和键的对象的集合。

https://msdn.microsoft.com/en-us/library/bb534304(v=vs.110).aspx

所以,你正在看一些Linqpad的功能我想,至少要显示它包含N个Grouping'2类型的项目(其中2指的是参数数量)

IGrouping<TKey, TElement>的结果将为您提供一个可以开展工作的集合:Enumerable operationsKey包含您分组的对象。

--- ---编辑

我在你自己的回答中看到你使用了Any() - 这是众多可枚举操作中的一个。