2016-08-02 3 views
1

Итак, у меня есть «Ever Expanding LINQ Query» ... Я обнаружил, что мне нужно придерживаться ряда параметров, и я получаю crosseyed. У меня есть это:Добавление OR к моему запросу LINQ?

var ud = db.Updates 
    .Where(c => c.Sold.Equals(false)&&(c.Status.Equals(("Pending")))) 
    .GroupBy(c => c.Vehicle) 
    .Select(x => x 
     .OrderByDescending(y => y.TimeStamp) 
     .First()) 
    .ToList(); 

И мне нужно, чтобы добавить или в «c.Status.Equals» для проверки нескольких значений строк ... таких как «Ожидание» || «Отвергнуто», что это правильный путь/место для этого?

Большое спасибо за помощь!

+0

Почему бы не 'c =>! c.Sold && c.Status ==" Pending "'? Вам действительно не нужно использовать 'Equals' здесь. – juharr

ответ

11

Вы можете рассмотреть вопрос о хранении массива значений, чтобы увидеть, если какие-либо из ограничений выполнено:

// Store all of the statuses you need to match within a collection 
var validStatuses = new []{ "Pending", "Rejected", ... }; 

Тогда вам просто необходимо будет обновить пункт Where(), чтобы проверить, если ваш существующий статус соответствует какому-либо из те, в вашей ранее определенной коллекции:

db.Updates.Where(c => !c.Sold && validStatuses.Contains(c.Status))) 
+0

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

+0

Oyyy ... конечно. Спасибо! Я действительно должен знать лучше, чем слишком поздно ложиться спать головой против такого рода вещей. Я очень благодарен! Спасибо огромное! – PaulBinCT2

+0

К сожалению. Мне не хватало скобок, чтобы указать, что коллекция выше была массивом. Это должно решить проблему. –

0

(c.Status.Equals ("Ожидание") || c.Status.Equals ("Отклонено"))

var ud = db.Updates 

     .Where(c => c.Sold.Equals(false) &&(c.Status.Equals("Pending") || c.Status.Equals("Rejected"))) 
     .GroupBy(c => c.Vehicle) 
     .Select(x => x.OrderByDescending(y => y.TimeStamp).First()).ToList(); 
+0

@Rion Williams ... Могу ли я одолеть вашу доброту еще раз? Я понял, что мне нужно внести изменения, и мой мозг тает. Конечный результат здесь - мне нужно получить самую последнюю запись из моей таблицы, так как она содержит одно из значений массива. Это означает, что мне нужно применить этот пункт в конце (?) Что я имею в виду: – PaulBinCT2

+0

var validStatuses = new [] {«Назначено», «Донор звонил», «Отправлено», «Ожидание»}; вар уд = db.Updates .где (с =>! C.Sold && validStatuses.Contains (c.Status)) .GroupBy (с => c.Vehicle) .Select (х => х .OrderByDescending (y => y.TimeStamp) .First()). ToList(); И он возвращает несколько записей, потому что предложение «Состояние» должно появиться после даты, чтобы оно возвращало самую последнюю запись, только если статус является одним из нашего массива. Прошу прощения ... Вы можете помочь? – PaulBinCT2

+0

Человек, я не знаю, получил ли я его. Можете ли вы показать возвращение и то, что вы ожидаете? Но, я думаю, что First() должен быть установлен после Select(). Пример: Выберите (x => x.OrderByDescending (y => y.TimeStamp)). Сначала() –

0

Попробуйте использовать || или оператором

(c.Status.Equals(("Pending")|| c.Status.Equals("Rejected"));