Проблема заключается в том, что LINQ не поддерживается на необработанных коллекций, только на общих из них. Таким образом, вы должны сделать свой список родовым так:
var myElem = from x in list.Cast<object[]>
where // some condition
select x.toList();
Cast<object[]>
заставит list
лечиться как IEnumerable<object[]>
, следовательно, сделать его общим перечислим и позволяет выражение LINQ.
Теперь, обратно к вашему коду, объект ["name"] кажется незаконным выражением в C#, поскольку объект не поддерживает такой доступ. В случае, если list
действительно представляет собой массив объектов, полученный из некоторого источника данных, то элементы "name"
и "lastName"
будут просто элементами массива. Если это так, обратитесь к answer другого пользователя jenson-button-event.
Если у вас есть список строк данных или какая-либо индексируемая структура, вы должны использовать тип этой структуры вместо object[]
. Например, если вы используете DataRow
, код должен выглядеть следующим образом:
IList list = new List<DataRow>();
var myElem = from x in list.Cast<DataRow>
where x["name"] == "No Name" || x["lastName"] == "No Name"
select x.toList();
Или еще лучше (чтобы избежать необработанных коллекций):
IList<DataRow> list = new List<DataRow>();
var myElem = from x in list
where x["name"] == "No Name" || x["lastName"] == "No Name"
select x.toList();
'' list' уже IEnumerable' – Grundy
@Grundy, 'IList' не _generic_ перечислим. Linq включен только для общих экземпляров. –
@ IvayloSlavov yep, вы правы, не обращали внимания на то, что присваиваете 'IList' как интерфейс, а не общий – Grundy