если у Вас есть избранный запрос LINQ, который должен только возвратить один результат, у Вас должен быть цикл foreach для получения результата?
Или есть ли лучший путь?
var myLinqObj = db.MyObjects.Take(1).SingleOrDefault();
// Will return a default value if no object is found in the DB
db.Table.SingleOrDefault(x => x.something == someParameter);
или
// Will throw an exception if records are not found
db.Table.Single(x => x.something == someParameter);
Спасибо Mehrdad за комментарий ... обе строки были обновлены.
Если возможно, что ваш запрос может привести к возврату нескольких записей, тогда (как указано в комментариях) Single ()
и SingleOrDefault ()
- неправильные методы для вызова. Вы можете сохранить тот же синтаксис, но вызвать First ()
и FirstOrDefault ()
соответственно.
Вы можете использовать либо First
, либо Single
.
First
возвращает первую строку, независимо от того, несколько строк или только one.
Single
ожидает, что будет возвращена только одна строка, и выдает исключение, если есть несколько строк.
Single
потенциально является лучшим выбором, если вы ожидаете, что будет только одна строка, поэтому что вы сразу увидите проблему и сможете устранить ее.
Вы можете просто использовать .First () или .FirstOrDefault () следующим образом:
Foo foo = query.Select(a => a.Name == "foo").FirstOrDefault();
Из всего сказанного мной добавлено использование значения
после того, как у вас есть единственный элемент, если вы используете LINQ-to-XML.
И Выберите новый {* cols *}
, если это список, массив или таблица.
Пример.
... выберите новый {c.Name, c.Value};
Этот совет поможет вам получить значения.