Существующий устаревший код выглядит следующим образом:
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
.
Будем признательны за все предложения.
Спасибо.
Боюсь, что это не наш призыв. Вот как мы получаем данные ...
Используйте 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();
Список 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());
оператор равенства в строках выполняет an ordinal (case-sensitive and culture-insensitive) comparison
, поэтому измените его в Where...
, если вам нужно какое-то другое сравнение в вашем случае.
Получил, и хотел поделиться информацией:
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();
Не используйте объект ...