Linq продолжить запрос, help pls!
От: woolf Россия  
Дата: 07.07.10 13:26
Оценка:
Добрый день, помогите продолжить фрагмент запроса :
 
var helpQuery = from res in
                                    (
                                        from orderInfo in context.OrderInfos
                                        select new
                                        {
                                            OrderInfoId = orderInfo.OrderInfoId,
                                            WebsiteId = orderInfo.WebsiteId,
                                            DataFeedId = orderInfo.DataFeedId,
                                            WidgetId = orderInfo.WidgetId
                                        }
                                    )
                                join ws in context.Websites.Where(ws => ws.IsActive == true) on res.WebsiteId equals ws.WebsiteId into site
                                from wsite in site.DefaultIfEmpty()
                                join df in context.DataFeeds.Where(df => df.IsActive == true) on res.DataFeedId equals df.DataFeedId into feed
                                from wfeed in feed.DefaultIfEmpty()
                                join wg in context.Widgets.Where(wg => wg.IsActive == true) on res.WidgetId equals wg.WidgetId into widgets
                                from widget in widgets.DefaultIfEmpty()
                                select new
                                {
                                    OrderInfoId = res.OrderInfoId,
                                    WebsitePLId = wsite.ProductLineId,
                                    DataFeedPLId = wfeed.ProductlineId,
                                    WidgetPLId = widget.ProductLineId
                                };

необходимо последние три поля WebsitePLId, DataFeedPLId, WidgetPLId итогового результата "схлопнуть" в одно поле ProductlineId
по логике следующего метода:

private long GetOneProductLineId(long? wsitePlId, long? dataFeedPlId, long? widgetPlId)
        {
            if (wsitePlId.HasValue)
            {
                return wsitePlId.Value;
            }
            if (dataFeedPlId.HasValue)
            {
                return dataFeedPlId.Value;
            }
            if (widgetPlId.HasValue)
            {
                return widgetPlId.Value;
            }
            return -1;
        }

Но данный метод не поддерживается в запросе. Как можно разрешить эту логику.
Спасибо за внимание!

Чем дальше в лес, тем толще партизаны.....
Re: Linq продолжить запрос, help pls!
От: Sharov Россия  
Дата: 07.07.10 14:03
Оценка: 1 (1)
Здравствуйте, woolf, Вы писали:

W>Добрый день, помогите продолжить фрагмент запроса :


А кастомный extension method не подойдет?
Кодом людям нужно помогать!
Re: Linq продолжить запрос, help pls!
От: RushDevion Россия  
Дата: 07.07.10 14:06
Оценка: 3 (1)
Вариант 1:
ProductId = wsite.ProductLineId ?? wfeed.ProductlineId ?? widget.ProductLineId ?? -1
Hint — возможно потребуется явное приведение типов
Вариант 2 (более правильный):
Создайте класс результата и из запроса возвращайте его new Result (res.OrderInfoId, wsite.ProductLineId, wfeed.ProductlineId, widget.ProductLineId).
А уже в класс добавьте свойство ProductLineId с нужной логикой объединения
Re: Linq продолжить запрос, help pls!
От: woolf Россия  
Дата: 09.07.10 10:37
Оценка:
Спасибо за идеи. Вариант N1 устроил вполне.
W> А кастомный extension method не подойдет?
Подойдет, но пока не знаком, буду "курить" эту тему.

Чем дальше в лес, тем толще партизаны.....
Re: Linq продолжить запрос, help pls!
От: knst Россия  
Дата: 13.07.10 18:09
Оценка:
... select new
{
OrderInfoId = res.OrderInfoId,
ProductLineId = GetOneProductLineId(wsite.ProductLineId,wfeed.ProductlineId,widget.ProductLineId)
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.