Захватывая только верхнюю запись из запроса LINQ - PullRequest
3 голосов
/ 14 июня 2010

У меня в основном много плохо спроектированного кода, чтобы сделать что-то, что, я уверен, можно сделать гораздо более элегантно.

То, что я пытаюсь сделать, это взять последнюю дату из таблицы базы данных.

var Result = 
from a in DB.Table
orderby a.Date descending
select new {Date = a};

foreach(var Row in Result)
{
LastDate = Row.Date.Date;
break;
}

По сути, есть цикл foreach, который предназначен для запуска только один раз.Дрянной код!Что такое «лучший метод» для достижения той же цели?

Ответы [ 7 ]

13 голосов
/ 14 июня 2010
var first = Result.First();

Если набор результатов пуст, это вызовет исключение;вы можете использовать FirstOrDefault (), который будет возвращать ноль, если набор результатов пуст.

8 голосов
/ 14 июня 2010

Звоните First().
Например:

LastDate = 
    (from a in DB.Table
     orderby a.Date descending
     select a.Date
    ).First();

Если таблица может быть пустой, вызовите FirstOrDefault(), который вернет DateTime.MinValue вместо выдачи исключения.

3 голосов
/ 14 июня 2010
var LastDate = DB.Table.OrderBy(a => a.Date).FirstOrDefault();
1 голос
/ 14 июня 2010

FirstOrDefault () и в качестве бонуса вы можете использовать LastOrDefault () для ... как вы уже догадались ...

[править] - о, внезапный рывок с тем же ответом:)

0 голосов
/ 15 июня 2010

Если вы пытаетесь найти самую последнюю дату, вы можете использовать функцию «Макс» (которую, я считаю, linq2sql преобразует в операцию SQL MAX):

var maxdate = DB.Table.Max(a => a.Date)
0 голосов
/ 14 июня 2010

Если Date является ссылочным типом, вы можете рассмотреть оператор объединения.

var LastDate = Result.FirstOrDefault () ?? новая дата ();

0 голосов
/ 14 июня 2010

Вы также можете вызвать Result.Take(1) Разница между Take(1) и First() в том, что First возвращает один объект, а Take возвращает IEnumerable типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...