Метод 'System.Object DynamicInvoke (System.Object [])' не поддерживает перевод в SQL - PullRequest
2 голосов
/ 03 июня 2011

Допустим, у меня есть таблица с именем Poll, и я хочу написать расширение LINQ, чтобы перечислить все опросы, идентификаторы которых принадлежат массиву.Например:

void Main()
{
    long[] ids = new long[]{ 1,2,3,4,5,6,7,8,9 };

    ListFail<Poll>(Poll, p => p.ID, ids); //Failed!
    ListOK<Poll>(Poll, p => p.ID, ids); //OK!
}

public void ListFail<T>(Table<T> obj, Func<T, long> idProperty, long[] ids) where T : class
{
    obj.Where(p => ids.Contains(idProperty(p))).ToList().Dump();
}

public void ListOK<T>(Table<T> obj, Func<T, long> idProperty, long[] ids) where T : class
{
    obj.ToList().Where(p => ids.Contains(idProperty(p))).ToList().Dump();
}

Я не знаю, почему я получаю сообщение об ошибке ListFail

Method 'System.Object DynamicInvoke(System.Object[])' has no supported translation to SQL.

, и когда я добавил ToList() до Where, он запускаетсяну на ListOK но конечно я не хочу получать всю таблицу Poll.

Есть идеи?

1 Ответ

2 голосов
/ 03 июня 2011

Измените Func<T, long> на Expression<Func<T, long>>. Прямо сейчас, из-за этого EF не понимает этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...