【问题标题】:Linq on List<object>Linq on List<object>
【发布时间】:2019-01-17 11:17:14
【问题描述】:

现有遗留代码如下:

List<object> myItems;
//myItems gets populated by a method call

foreach (object[] item in myItems)
{
  string Id = item[0].ToString();
  string Number = item[1].ToString();

  //now do some processing if Number satisfies some criteria
}

希望使用 linq 将其转换为选择与某个 Number 匹配的所有 Ids。

所有建议将不胜感激。

谢谢。

【问题讨论】:

  • 不要使用对象...
  • 恐怕这不是我们的电话。这就是我们获取数据的方式...

标签: c# linq listobject


【解决方案1】:

使用Select()Where()

bool IsSatisfyingNumber(String number) {
    // True if number satisfies some criteria
}

List<String> matchingIds = myItems
    .Where(item => IsSatisfyingNumber(item[1].ToString()))
    .Select(item => item[0].ToString())
    .ToList();

【讨论】:

    【解决方案2】:

    列表myItems 包含object 类型的项目,其中每个项目实际上都是object[],因此我们需要先转换为object[],然后根据搜索到的certain number 进行过滤和选择。

    string certainNumber = "1";
    var myIds = myItems
        .Where(o => ((object[]) o)[1].ToString() == certainNumber)
        .Select(o => ((object[]) o)[0].ToString());
    

    字符串上的equality operator 执行an ordinal (case-sensitive and culture-insensitive) comparison,因此如果您需要一些不同类型的比较,请在Where... 中更改它。

    【讨论】:

      【解决方案3】:

      得到它的工作,并希望分享信息:

      var myIds = 
      (from item in myItems.Cast<object[]>()
        select new
        { Id = item[0], Number = (string)item[1] }
      )
      .Where(x => x.Number == filtercondition)
      .Select(x => (string)x.Id)
      .ToList();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-05
        • 1970-01-01
        • 2018-01-25
        • 2015-07-09
        • 1970-01-01
        相关资源
        最近更新 更多