按查询分组时Linq出现问题
也许有人知道如何在linq(或lambda)中实现这种查询 我把这一套列在清单上按查询分组时Linq出现问题,linq,lambda,Linq,Lambda,也许有人知道如何在linq(或lambda)中实现这种查询 我把这一套列在清单上 过滤器:我的输入将是代码100和101,我需要得到“值”,在这个例子中=1,2 问题:如果你输入100和101,你会得到3个结果,因为第一组和第二组的结果是100。我只需要在同一组中匹配的一对。(并且您没有将组作为输入参数) 如果该组完全存在,我如何解决此问题 谢谢 首先用代码简单表示图片中的内容: var list = new[] { new{code = 100, value = 1, group =
过滤器:我的输入将是代码100和101,我需要得到“值”,在这个例子中=1,2 问题:如果你输入100和101,你会得到3个结果,因为第一组和第二组的结果是100。我只需要在同一组中匹配的一对。(并且您没有将组作为输入参数) 如果该组完全存在,我如何解决此问题
谢谢 首先用代码简单表示图片中的内容:
var list = new[]
{
new{code = 100, value = 1, group = 1},
new{code = 101, value = 2, group = 1},
new{code = 100, value = 3, group = 2},
new{code = 103, value = 4, group = 2},
};
var inp = new[]{100, 103};
然后我们可以做:
list
.GroupBy(el => el.group) // Group by the "group" field.
.Where(grp => !inp.Except(grp.Select(el => el.code)).Any()) // Exclude groups that don't contain all input values
.Single() // Obtain the only such group (with a check that there is only one)
.Select(el => el.value); // Obtain the "value" fields.
如果您的输入可能是某些组的“代码”字段的子集,您还可以通过排除大小不同的组来检查是否完全匹配所有组:
list
.GroupBy(el => el.group)
.Where(grp =>
grp.Count() == inp.Count()
&& !inp.Except(grp.Select(el => el.code)).Any())
.Single()
.Select(el => el.value);
还有其他变体与您的问题的其他可能解释相匹配(例如,我假设只有一个匹配组,但这并不清楚)。您的输入“100和101”准确程度如何?这里的数据结构是什么?如果您能提供一个简短但完整的代码示例,这会有所帮助。此外,如果还有“code=101,value=5,group=2”行,那么值会是多少?如果有一个“代码102,值=6,组=1”行呢?现在还不清楚你想要实现什么。输入是一个带有bouth值的可枚举项,其余的对于这个问题来说并不重要,因为你可能有数千个变量,我只需要实现这个结果。如果将来有其他数据,我会处理它。谢谢我是否正确地认为,对于这里的表格,您唯一的输入可能是
100
&101
,或者100
&103
?也就是说,你永远不会有一个不是完整组的输入?此外,你能有一个完全匹配另一组的组吗?(例如,行是否存在100:5:3
和101:6:3
因此表示组3也匹配)?不要描述,添加代码。剩下的对于这个问题来说是绝对重要的,为了理解你想要实施的规则。如果你想让别人帮助你,你需要提供更多的信息。酷!,“那么我们可以做”下面的答案很好!谢谢还使用了一种不知道称为“序列相等”的非LINQ方法,也许你可以分组值,只返回序列等于=的组。LINQ方法<代码> SequenceEqual < /C>会考虑两个序列是否相等,如果它们具有相同的匹配项。代码>sequenceA.Count()==sequenceB.Count()&&!sequenceA.Exception(sequenceB).Any()将匹配两个序列,忽略顺序。使用更合适的。给定已知序列的顺序相同,这当然是相同的,但在这种情况下,SequenceEqual
会更快。不知道顺序。。。现在我需要检查我申请的其他东西:P谢谢。