У меня есть интересная проблема, и я не могу понять лямбда-выражение, чтобы сделать эту работу.
У меня есть следующий код:
List<string[]> list = GetSomeData(); // Returns large number of string[]'s
List<string[]> list2 = GetSomeData2(); // similar data, but smaller subset
List<string[]> newList = list.FindAll(predicate(string[] line){
return (???);
});
Я хочу вернуть только те записи в списке, в которых элемент 0 каждой строки [] равен одному из элементов 0 в списке list2.
список содержит такие данные:
"000", "Data", "more data", "etc..."
list2 содержит такие данные:
"000", "different data", "even more different data"
По сути, я мог бы написать этот код так:
List<string[]> newList = new List<string[]>();
foreach(var e in list)
{
foreach(var e2 in list2)
{
if (e[0] == e2[0])
newList.Add(e);
}
}
return newList;
Но я пытаюсь использовать дженерики и многое другое, поэтому я ищу хорошее чистое решение. Это меня расстраивает, хотя ... может быть, находка внутри находки?
EDIT:
Ответ Марка, приведенный ниже, побуждает меня экспериментировать с извращением, которое выглядит следующим образом:
var z = list.Where(x => list2.Select(y => y[0]).Contains(x[0])).ToList();
Я не уверен, насколько это эффективно, но это работает и достаточно кратко. У кого-нибудь еще есть предложения?