2014-03-03 3 views
-2

У меня есть SQL-запрос, как это:Как преобразовать мою команду SQL в выражение лямбда?

select top 1 Newsletter_HTML_Tag from Newsletter_TBL 
    where (Newsletter_Category_ID=1) 
    order by Creation_Date desc 

и у меня есть метод, который даст мне список всех записей с Newsletter_TBL имени:

NewsletterGellAll()

и Я пробовал это раньше, но это не работает:

NewsletterGellAll() 
    .FirstOrDefault(c => c.NEWSLETTER_CATEGORY_ID == 1) 
    .orderby(a => a.Creation_Date) 

Как это исправить?

+3

_ «это не работает» _ не имеет смысла. –

+0

Это GetAllNewsLetter() или NewsLetterGetAll()? Кроме того, какая ошибка вы получаете? – Andrew

ответ

0

Первый запрос все элементы с кошачьей == 1, а затем заказать его, чтобы получить первый

NewsletterGellAll().Where(c=>c.NEWSLETTER_CATEGORY_ID==1) 
        .OrderBy(a=>a.Creation_Date) 
        .First(); 
+0

Это может вызвать исключение, когда не будет записей с категорией == 1 –

0

Это должно быть OrderByDescending вместо OrderBy, если вы хотите, чтобы повторить результаты для SQL Query.

Кроме того, если вы посмотрите на ваш запрос:

NewsletterGetAll() 
.FirstOrDefault(c => c.NEWSLETTER_CATEGORY_ID == 1) 
.OrderBy(a => a.Creation_Date) 

В SQL это будет хорошо, так как он оценивает ORDER BY перед выражением TOP. Однако в Linq он примет первую запись, соответствующую категории, а затем закажет одну запись. Так что это даже не будет построено, вы не можете отсортировать один элемент.

Поэтому она должна быть

NewsletterGetAll() 
.Where(c => c.NEWSLETTER_CATEGORY_ID == 1) 
.OrderByDescending(c => c.Creation_Date) 
.FirstOrDefault(); 
0

Это всегда целесообразно использовать первую или по умолчанию, когда вы не уверены в том, что условие не будет выполнено, так как это будет также обрабатывать нулевой случай. Значит, если нет записей (с конкретным условием).

В зависимости от того, до настоящего времени, а также, здесь считают, что дата по возрастанию (старая дата первого)

NewsletterGellAll().Where(c=>c.NEWSLETTER_CATEGORY_ID==1) 
        .OrderBy(a=>a.Creation_Date) 
        .FirstOrDefault(); 
+0

как я могу добавить .ToList() в ваш код? Там в любом случае? – pejman

+0

ToList() используется, когда возвращается List, так как вы получите только одну запись, поэтому здесь используется First или Default. –

0

использовать LINQPad и сделать профессиональные LINQ и SQL запросов. здесь linqpad

+0

Это не очень хорошая практика, вы должны знать, какое преобразование для лучшего обучения. –