Извлечь отдельный элемент, используя DataContext - PullRequest
0 голосов
/ 09 октября 2009

Я делаю следующее:

public MyItem FetchSingleItem(int id)
{
  string query = "SELECT Something FROM Somewhere WHERE MyField = {0}";
  IEnumerable<MyItem> collection = this.ExecuteQuery<MyItem>(query, id);
  List<MyItem> list = collection.ToList<MyItem>();
  return list.Last<MyItem>();
}

Это на самом деле не очень элегантно, и я надеялся, что есть кое-что получше, если использовать DataContext. Я расширяю с DataContext в моем хранилище. Есть веская причина, почему вы спрашиваете, но не в этом вопрос;)

Итак, есть ли лучшие способы сделать это?

Приветствия

Ответы [ 3 ]

0 голосов
/ 09 октября 2009
myDataContext.MyItem.Where(item => item.MyField == id)
    .Select(item => item.Something)
    .FirstOrDefault();
0 голосов
/ 09 октября 2009

Возвращаемая запись не определена, так как у вас нет ORDER BY. Поэтому сложно сделать точный перевод. В общем, однако, измените порядок и возьмите First ():

var q = from s in this.Somewhere
        where s.MyField == id
        orderby s.Something desc
        select s.Something;
return q.First();

Реляционные таблицы неупорядочены. Поэтому, если вы не укажете нужную запись, вы должны считать возвращенную запись случайно выбранной.

0 голосов
/ 09 октября 2009

Если это SQL Server, измените ваш SQL на:

SELECT TOP 1 Something FROM Somewhere ...

Или, альтернативно, измените эти строки

List<MyItem> list = collection.ToList<MyItem>();
return list.Last<MyItem>();

в этот:

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