LINQ: поле не является справочным полем - PullRequest
2 голосов
/ 07 декабря 2010

У меня есть список IQueryable. Я пытаюсь разделить этот список на массив соответствия IQueryable для определенного поля (скажем, fieldnum) в первом списке ...

например, если fieldnum == 1, он должен идти в массив [1]. Я использую Where () для фильтрации на основе этого поля, это выглядит примерно так:

var allItems = FillListofMyObjects();        
var Filtered = new List<IQueryable<myObject>(MAX+1);

for (var i = 1; i <= MAX; i++)
{
        var sublist = allItems.Where(e => e.fieldnum == i);
        if (sublist.Count() == 0) continue;

        Filtered[i] = sublist;
}

однако я получаю сообщение об ошибке Поле "t1.fieldnum" не является справочным полем в строке if. пошаговое выполнение отладчика показывает, что ошибка на самом деле возникает в строке раньше (метод Where ()), но в любом случае я не знаю, что я делаю неправильно.

Я очень новичок в LINQ, поэтому, если я все делаю неправильно, пожалуйста, дайте мне знать, спасибо!

Ответы [ 2 ]

4 голосов
/ 07 декабря 2010

Почему бы вам просто не использовать ToLookup ?

var allItemsPerFieldNum = allItems.ToLookup(e => e.fieldnum);

Вам нужно пересматривать выражение каждый раз, когда вы получаете значения?

2 голосов
/ 07 декабря 2010

Почему бы не использовать словарь?

var dictionary = allItems.ToDictionar(y => y.fieldnum);
...