В тупик на Entity Framework и лямбда-выражений - PullRequest
0 голосов
/ 24 июня 2009

Я знаю, что в настоящее время компилятору не нравится это утверждение. Получение ошибки

Cannot convert lambda expression to delegate type 'System.Func<MyData.Models.SomeModels,bool>' because some of the return types in the block are not implicitly convertible to the delegate return type

Мое заявление, которое я передаю своему классу репозитория

var qry = repositoryClass.Find(c => c.Categories.Where(d => d.CategoryParentID == typeID));

Метод поиска класса репозитория

        public IEnumerable<SomeModels> Find(Func<SomeModels, bool> exp)
    {
        return (from col in _db.SomeModels where exp select col);
    }

Ответы [ 2 ]

4 голосов
/ 24 июня 2009

Для работы с EF вам нужно Expression<...>, примененное (в качестве предиката) с Where:

public IEnumerable<SomeModels> Find(Expression<Func<SomeModels, bool>> exp)
{
    return _db.SomeModels.Where(exp);
}

Тогда вы бы назвали это:

var qry = repositoryClass.Find(c => c.CategoryParentID == typeID);

Затем лямбда переводится в Expression<...>.

Если ваша установка более сложная, уточните.

0 голосов
/ 24 июня 2009

Я только что добавил метод в свой класс репозитория

    public IEnumerable<Models> GetByCategory(int categoryID)
    {
        var qry = _db.ModelCategories.Where(p => p.CategoryID == categoryID).First();
        qry.Models.Load();

        return qry.Models;
    }

Я предполагаю, потому что это должно быть загружено, это - лучший путь.

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