列表上的Linq <对象>

时间:2018-08-09 22:03:50

标签: c# linq listobject

现有的旧版代码如下:

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进行转换,以选择与某个Id匹配的所有Number

所有建议将不胜感激。

谢谢。

3 个答案:

答案 0 :(得分:3)

使用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();

答案 1 :(得分:0)

列表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...中进行更改。

答案 2 :(得分:0)

使其正常运行并希望共享信息:

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();