ef cf linq заполнить игнорируемое свойство - PullRequest
2 голосов
/ 16 сентября 2011

Я уверен, что об этом уже спрашивали, но я не смог найти хороший способ поиска по нему.

У меня есть класс, подобный следующему

public class Vendor
{
    public int VendorId { get; set; }
    public string Name { get; set; }
    public int ProductCount { get; set; }
}

У меня есть настройка класса конфигурации, например

public class VendorConfiguration : EntityTypeConfiguration<Vendor>
{
    public VendorConfiguration()
    {
        Property(p => p.Name).IsRequired().HasMaxLength(128);
        Ignore(v => v.ProductCount);
    }
}

Вот запрос, который я использую для захвата поставщиков.

    public Vendor[] GetVendors()
    {
        using (var db = new UbidContext())
        {
            var query = (from vendor in db.Vendors
                                        select vendor);

            return query.ToArray();
        }
    }

Как я могу заполнить ProductCount подзапросом, который будет выглядеть так:

ProductCount = (from vend in db.VendorProducts
 where vend.VendorId == id
 select vend).Count()

Есть ли способ, которым я могу добавить это к основному запросу, поэтому я делаю только 1 вызов в БД?

Спасибо, Эндрю

1 Ответ

6 голосов
/ 16 сентября 2011

Я бы попробовал это так:

public Vendor[] GetVendors()
{
    using (var db = new UbidContext())
    {
        var query = from vendor in db.Vendors
                    join vp in db.VendorProducts
                        on vendor.VendorId equals vp.VendorId
                    into vendorProducts
                    select new
                    {
                        Vendor = vendor,
                        ProductCount = vendorProducts.Count()
                    };

        foreach (var item in query)
            item.Vendor.ProductCount = item.ProductCount;

        return query.Select(a => a.Vendor).ToArray();
    }
}

Проблема в том, что вы должны проецировать в не-сущностный тип (анонимный в приведенном выше примере), а затем скопировать прогнозируемое значение ProductCount в прогнозируемоеVendor пункт за товаром, прежде чем вернуть его.

...