【问题标题】:Linq query help c#linq查询帮助c#
【发布时间】:2012-01-24 15:11:55
【问题描述】:

我正在尝试编写一个 linq 查询。

我需要我的查询来获取一个二维数组 (d)。它需要检查 d 中的每个数组,如果第一个和最后一个元素不为空,但其中的任何元素为空,它将删除空元素。

例子

{{test,"",test}, {test, test, test,"",test}} = {{test,test}, {test, test, test,test}}

但我需要能够保留空字符串,所以不能只搜索它们并删除它们。

我希望我已经解释得足够好。

【问题讨论】:

  • 我可以在 linq 中非常简单地检查第一个和最后一个元素,所以我正在努力解决如何检查中间元素并获取每个数组的结果....不知道从哪里开始那....
  • @user101010101 “但我需要能够保留空字符串,所以不能只搜索它们并删除它们。” ..你打算如何保留它们?

标签: c# .net linq c#-4.0


【解决方案1】:

也许

var out = input.Select(x =>
       ((!String.IsNullOrEmpty(x.FirstOrDefault()))
        && (!String.IsNullOrEmpty(x.LastOrDefault())))
           ? x.Where(y => !String.IsNullOrEmpty(y)).ToArray()
           : x).ToArray();

如果您只需要 IEnumerables,您可能可以删除 ToArrays。

【讨论】:

    【解决方案2】:

    我会试试这个:

    string test = "test";
    var array = {{test,"",test}, {test, test, test,"",test}};
    
    string[] TransformRow(string[] inputRow)
    {
      return intputRow.Where(cell => cell != string.Empty).ToArray();
    }
    
    var validArray = array.Select(row => TransformRow(row));
    

    【讨论】: