Проблемы с преобразованием типов при проецировании LINQ в класс ADO.Net Entity Framework - PullRequest
0 голосов
/ 23 августа 2010

Я сталкиваюсь с некоторыми проблемами при построении запроса с использованием LINQ и Entity Framework.

Моя модель такая

Merchants(MerchantId)
    AffiliateFeeds(AffiliateFeedId, MerchantId)
        ProductSKUs(ProductId, AffiliateFeedId)

Этот фрагмент работает достаточно хорошо:

// only get Merchants and AffiliateFeeds based on specific ProductSKU.ProductId

var productSKUs = from ps in _context.ProductSKUs
                    where ps.ProductId == 38
                    select ps.AffiliateFeedId;

var feeds = from af in _context.AffiliateFeeds
            where productSKUs.Contains(af.AffiliateFeedId)
            select af;

var dm = (from f in feeds select f.MerchantId).Distinct();   

var merchants = from m in _context.Merchants
                where dm.Contains(m.MerchantId)
                select new 
                {
                    MerchantId = m.MerchantId,
                    Name = m.Name,
                    SysName = m.SysName,
                    DataFeedUrl = m.DataFeedUrl,
                    AffiliateFeeds = feeds.Where(x => x.MerchantId == m.MerchantId)
                };

Однако, когда я пытаюсь выполнить проекцию в сгенерированный класс Entity Framework, называемый Merchant, так:

var merchants = from m in _context.Merchants
                where dm.Contains(m.MerchantId)
                select new Merchant
                {
                    MerchantId = m.MerchantId,
                    Name = m.Name,
                    SysName = m.SysName,
                    DataFeedUrl = m.DataFeedUrl,
                    AffiliateFeeds = feeds.Where(x => x.MerchantId == m.MerchantId)
                };

Я получаю сообщение об ошибке:

Невозможно неявно преобразовать тип 'System.Linq.IQueryable' в 'System.Data.Objects.DataClasses.EntityCollection'

Ответы [ 2 ]

2 голосов
/ 23 августа 2010

Ну, само сообщение об ошибке довольно ясно: свойство AffiliateFeeds имеет тип EntityCollection<SACore.AffiliateFeed>, и вы пытаетесь присвоить ему произвольное значение IQueryable<SACore.AffiliateFeed>.

Совсем как fix проблема в другом.Я ожидал бы, что предложение Where будет эффективно автоматическим на основе определений сущностей для объединения таблиц.

0 голосов
/ 23 августа 2010

Вы не можете проецировать на типы EF.Вы можете проецировать на POCO и анонимные типы, но не на EF-отображаемые типы.Причина в том, что EF никогда не будет частично материализовать экземпляр сущности.

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