2016-05-12 4 views
1

я написать следующий SQL запрос в LINQ в C#Использования ИЛИ условие LINQ C#

SELECT max(creation_date) from TRS where approval_status='APPROVED' and transaction_type in ('Sale','PRE') 

я пытался зданием ниже запроса в списке следующим образом

var session = txns.Where(a => a.transaction_type.Equals("SALE")) 
        .Where(a => a.transaction_type.Equals("PRE")) 
        .Where(a => a.approval_status.Equals("APPROVED")) 
        .OrderByDescending(a => a.creation_date).Select(a => a.creation_date).FirstOrDefault(); 

приведенных выше Didnt запроса работает, как не был уверен в том, как использовать условия Max и OR в LINQ C#

Могу ли я узнать лучшее решение?

+0

var session = txns.Where (a => a.transaction_type.Equals ("SALE")) . Где (a => a.transaction_type.Equals ("PRE") || a.approval_status.Equals (" APPROVED ")) .OrderByDescending (a => a.creation_date). Выберите (a => a.creation_date) .FirstOrDefault(); – user3953989

ответ

6
var session = txns 
    .Where(a => a.transaction_type.Equals("SALE") || a.transaction_type.Equals("PRE")) 
    .Where(a => a.approval_status.Equals("APPROVED")) 
    .Select(a=>a.creation_date).Max(); 

или

var txtypes=new[]{"SALE","PRE"}; 
var session = txns 
    .Where(a => txtypes.Contains(a.transaction_type)) 
    .Where(a => a.approval_status.Equals("APPROVED")) 
    .Select(a=>a.creation_date).Max(); 

или

var session = txns 
    .Where(a => a.transaction_type.Equals("SALE") || a.transaction_type.Equals("PRE")) 
    .Where(a => a.approval_status.Equals("APPROVED")) 
    .Max(a=>a.creation_date); 
+0

Как обрабатывать «Ссылка на объект не установлена ​​в экземпляр объекта», когда одно из полей имеет нулевое значение? – DoIt

+0

@dev какой? Попробуйте перейти от .Equals (...) к просто == –

3

Вы можете использовать || оператору объединить два условия, или вы можете использовать Contains, который будет генерировать запрос типа SELECT IN (....)

var transcationTypes = new[] {"SALE", "PRE"}; 
var sessions = txns.Where(a => transcationTypes.Contains(a.transaction_type) 
           && a.approval_status == "APPROVED") 
    .Select(a => a.creation_date) 
    .Max(); 

После того как вы отфильтровали результаты, вы можете использовать Max, чтобы выбрать максимальное значение.