Обнаружение Йоло с предварительно тренированными весами на тензорном потоке

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

public IEnumerable<Product> GetProducts(int categoryID)
{
    return (from p in Context.Set<Product>()
            where p.CategoryID == categoryID
            select new { Name = p.Name }).ToList()
           .Select(x => new Product { Name = x.Name });
}

Редактировать: я собираюсь быть более конкретным, так как этот вопрос получил большое внимание.

Вы не можете напрямую проецироваться в тип модели (ограничение EF), поэтому нет никакого способа обойти это. Единственный способ - проецировать на анонимный тип (1-я итерация), а затем на тип модели (2-я итерация).

Также помните, что при частичной загрузке объектов таким образом они не могут быть обновлены, поэтому они должны оставаться отсоединенными, как они есть.

Я никогда не понимал, почему это невозможно, и ответы на эту тему не дают против этого серьезных оснований (в основном, о частично загруженных данных). Правильно, что в частично загруженном состоянии сущность не может быть обновлена, но тогда этот объект будет отсоединен, поэтому случайные попытки сохранить их будут невозможны.

Рассмотрим метод, который я использовал выше: у нас все еще есть в результате получается частично загруженная модель.

Рассмотрим этот возможный код:

return (from p in Context.Set<Product>()
        where p.CategoryID == categoryID
        select new Product { Name = p.Name }).AsNoTracking().ToList();

Это также может привести к списку отдельных объектов, поэтому нам не понадобится сделать две итерации. Компилятор был бы умен, чтобы увидеть, что AsNoTracking () используется, что приведет к отсоединенным объектам, чтобы оно могло позволить нам это сделать. Если, однако, AsNoTracking () был опущен, он мог бы сделать то же исключение, что и сейчас, чтобы предупредить нас, что нам нужно быть достаточно конкретным относительно желаемого результата.

-1
задан aleio1 29 March 2019 в 09:00
поделиться