2016-07-15 2 views
1

Я хотел бы получить последние 5 значений времени выполнения и доступности. Чтобы получить это, я попробовал несколько способов, но, к сожалению, без успеха.Оператор && не может применяться к операндам типа decimal и decimal

Я попытался это:

var completeTransactions2 = temp4 
         .Where(x => x.GroupidAvai == x.GroupidPerf && x.KeyTimeAvai == x.KeyTimePerf) 
         .GroupBy(x => x.GroupidAvai) 
         .Select(group => group.OrderByDescending(record => (record.KeyTimeAvai) && (record.KeyTimePerf)).Take(5)); 

Но я получаю сообщение об ошибке: Оператор & & не может быть применен к операндам типа десятичной и десятичной.

С этой информацией я пробовал что-то, но в результате только один perfTime принимает последние 5 значений и отменяет их. Доступность есть только один avaitime. Это вопрос:

var orderedTemp72 = temp4 
         .Where(x => x.GroupidAvai == x.GroupidPerf) 
         .GroupBy(x => new { x.GroupidAvai, x.GroupidPerf }) 
         .Select(x => x.OrderByDescending(record => record.KeyTimeAvai) 
         .ThenByDescending(record => record.KeyTimePerf).Take(5).Reverse()); 

Я надеюсь, что кто-то может поставить меня в правильном направлении, чтобы решить это. Если есть вопросы, пожалуйста, не стесняйтесь спрашивать.

Благодарим вас за чтение.

+1

Попробуйте добавить круглые скобки вокруг двух выражений ==. –

+1

Не совсем ясно, чего вы пытаетесь достичь. Если вы фильтруете элементы с помощью 'x.GroupidAvai == x.GroupidPerf', то почему вы группируете' x.GroupidAvai, x.GroupidPerf'. Любой фильтр является неправильным или содержит группу с избыточными полями. Предоставление пробных входных данных и желаемого результата поможет нам понять цель, чтобы помочь вам. –

+0

@IvanStoev Вы правы. Есть несколько двойных данных, но пока мне это нужно для достижения моей конечной цели. Извините за путаницу, но вы все помогли мне решить это препятствие :) –

ответ

1

Спасибо, что ответили мне. Действительно оценен :) Со всеми вашими ответами я пришел к следующему решению, которое я могу использовать.

var completeTransactions = temp 
        .Where(x => x.GroupidAvai == x.GroupidPerf && x.KeyTimeAvai == x.KeyTimePerf) 
        .GroupBy(x => x.GroupidAvai) 
         .Select(group => group.OrderByDescending(record => record.KeyTimeAvai).Reverse().Take(5).OrderByDescending(record => record.KeyTimePerf).Reverse().Take(5)); 
1

Я думаю, что проблема заключается в вашем заявлении orderbyDescending.

Try что-то вроде

var completeTransactions2 = temp4 
        .Where(x => x.GroupidAvai == x.GroupidPerf && x.KeyTimeAvai == x.KeyTimePerf) 
        .GroupBy(x => x.GroupidAvai) 
        .Select(group => group.OrderByDescending(record => record.KeyTimeAvai).ThenBy(x => record.KeyTimePerf)).Take(5)); 
1

Попробуйте использовать этот синтаксис Выполнением OrderByDescending и ThenByDescending

var completeTransactions2 = temp4 
        .Where(x => x.GroupidAvai == x.GroupidPerf && x.KeyTimeAvai == x.KeyTimePerf) 
        .GroupBy(x => x.GroupidAvai) 
        .Select(gro => gro.OrderByDescending(r => r.KeyTimeAvai).ThenByDescending(r => r.KeyTimePerf).Take(5)); 

ИЛИ Ведение OrderByDescending и ThenBy

var completeTransactions2 = temp4 
         .Where(x => x.GroupidAvai == x.GroupidPerf && x.KeyTimeAvai == x.KeyTimePerf) 
         .GroupBy(x => x.GroupidAvai) 
         .Select(gro => gro.OrderByDescending(r => r.KeyTimeAvai).ThenBy(r => r.KeyTimePerf).Take(5)); 

Посмотри Here

1

Если вы хотите пять величайшие из KeyTimeAvai или KeyTimePerf

OrderByDescending(x => x.KeyTimeAvai >= x.KeyTimePerf 
         ? x.KeyTimeAvai 
         : x.KeyTimePerf).Take(5); 

Если вам нужны пяти величайших KeyTimeAvai и пять наибольшего KeyTimePerf (так что 10 результатов), я хотел бы сделать что-то подобное.

var groupedTransactions= temp4 
          .Where(x => x.GroupidAvai == x.GroupidPerf && 
             x.KeyTimeAvai == x.KeyTimePerf) 
          .GroupBy(x => x.GroupidAvai); 



var greatestByAvai = groupedTransactions 
        .Select(group => group.OrderByDescending(record => record.KeyTimeAvai) 
        .Take(5); 
var greatestByPerf = groupedTransactions 
        .Select(group => group.OrderByDescending(record => record.KeyTimePerf) 
        .Take(5); 

var allTransactions = greatesByAvai.Concat(greatestByPerf); 
Смежные вопросы