简单的LINQ查询

时间:2011-06-08 10:51:37

标签: c# linq

如何使用LINQ转换以下内容?

foreach (int[] arr in jaggedArray)
{
    if (arr[7] == 1)
    {
        if (!CheckThis(arr))
            boolSuccess = false;
        else
            intCount++;
    }
}

6 个答案:

答案 0 :(得分:1)

这样的事情:

var filtered = jaggedArray.Where(arr => arr[7] == 1);
var intCount = filtered.Where(ar => CheckThis(ar)).Count()
var boolSuccess = filtered.Count() == intCount;

答案 1 :(得分:0)

必须为相同的逻辑编写嵌套查询,否则必须首先简化源代码逻辑以获得简单的查询

答案 2 :(得分:0)

我使用ReSharper,这表明Linq表达式更好 - 并执行翻译。有时候,当Linq过于复杂且难以理解时,我会保留我的代码。

答案 3 :(得分:0)

我相信这会有效:首先,它通过获取满足intCount的所有项目并传递arr[7]==1方法来设置CheckThis()。这应该是您的intCount值。

然后,如果intCount中的值与数组的长度不匹配,则至少有一件事失败,因此您可以将boolSuccess设置为false。

请注意,我认为这个解决方案更聪明,更不易阅读。不太可读是一件坏事。另外,你可以轻松地重构你现有的方法,而这样做会因为Cleverness Factor而难以重构。

        intCount = jaggedArray.Where(x => x[7] == 1).Where(CheckThis).Count();
        if (intCount != jaggedArray.Length) boolSuccess = false;

答案 4 :(得分:0)

你可以使用Array.ForEach,虽然我认为你开始时实际上更清楚

Array.ForEach(jagged, arr => 
{ 
    if (arr[7] == 1) 
    { 
        if (!CheckThis(arr)) 
        { 
            boolSuccess = false; 
        } 
        else 
        { 
            intCount++; 
        } 
     } 
});

答案 5 :(得分:0)

intCount += jaggedArray
  .Where(arr => arr[7] == 1)
  .Select(arr => 
  {
    int val = CheckThis(arr) ? 1 : 0;
    if (val == 0) {boolSuccess = false;}
    return val;
  }).Sum()