Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按查询分组时Linq出现问题_Linq_Lambda - Fatal编程技术网

按查询分组时Linq出现问题

按查询分组时Linq出现问题,linq,lambda,Linq,Lambda,也许有人知道如何在linq(或lambda)中实现这种查询 我把这一套列在清单上 过滤器:我的输入将是代码100和101,我需要得到“值”,在这个例子中=1,2 问题:如果你输入100和101,你会得到3个结果,因为第一组和第二组的结果是100。我只需要在同一组中匹配的一对。(并且您没有将组作为输入参数) 如果该组完全存在,我如何解决此问题 谢谢 首先用代码简单表示图片中的内容: var list = new[] { new{code = 100, value = 1, group =

也许有人知道如何在linq(或lambda)中实现这种查询

我把这一套列在清单上



过滤器:我的输入将是代码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谢谢。