2017-01-05 6 views
0

У меня есть следующие Linq To Sql запросовИспользование Линг Sql, объединить два запроса в один, а затем получить INT значение результата

var group = "T"; 
var categoryQuery = from m 
        in ctx.Material 
        where m.Group == group 
        select m; 

var maxValue = from c 
       in categoryQuery 
       where c.Order == categoryQuery.Select(o => o.Order).Max() 
       select c.Order; 

Где Group это значение строки (например: «T», «S», «R») и Order - значение int. Я хочу достичь самого высокого значения Order int из строки в результирующем наборе, отфильтрованного определенным значением Group. В конечном счете, я хочу использовать максимальное значение для сравнения в другом месте кода, но у меня возникли проблемы с доступом к значению из объекта IQueryable maxValue.

Так образец из categoryQuery набора будет выглядеть следующим образом:

Id  Group Order 
----- ----- ----- 
100 T  0 
101 T  1 
102 T  2 
103 T  3 

Так во втором maxValue запроса, я хочу 3, потому что это не более Order значения из всех Т Group значений.

Первый вопрос: Как получить доступ к значению int в maxValue?

Второй вопрос: как я могу упростить свои запросы в одном запросе?

Спасибо

+0

Это приведет в одном запросе в конце концов. Вы посмотрели на запрос, который сгенерирован? [datacontext.log] (https://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.log (v = vs.110) .aspx) –

+0

Ваш запрос 'maxValue' просто идет чтобы быть списком максимального 'Order' в' categoryQuery', повторяющимся 0 или более раз. Что именно вы пытаетесь сделать? Можете ли вы показать некоторые примеры данных и результаты, которые вы хотите получить? – juharr

+0

Добавлены некоторые примеры данных, чтобы лучше прояснить вопрос. – ratman

ответ

0

кажется, так просто, как упорядочение по Order, наклонным, а затем взять первый элемент:

var group = "T"; 
var maxValue = (from m 
       in ctx.Material 
       where m.Group == group 
       orderby m.Order descending 
       select m).FirstOrDefault();