Что вернет LINQ to Entities при выборе целочисленного идентификатора для заданного имени строки, если запись не существует? - PullRequest
2 голосов
/ 24 июня 2009

Вот код:

string name = "myName";

int id = (int)_myDB.ThingTable.Where(thing => thing.ThingName == name)
                     .Select(thing => thing.ThingId);

У меня ошибка, связанная с тем, что System.Linq.IQueryable не может быть преобразован в int (я предполагаю, что это так, что я не получаю случай, когда строки не найдены - идентификатор не возвращается)

Во-первых, как я могу привести его к int?

Во-вторых, что возвращается, если не существует записи с именем ThingName ==?

Спасибо,
Matt

Ответы [ 2 ]

3 голосов
/ 24 июня 2009

Вам нужно выражение запроса, которое возвращает скаляр. Что-то вроде:

myCollection.Where(c => c.X > 0).FirstOrDefault();

В вашем примере это будет:

int id = (int)_myDB.ThingTable.Where(thing => thing.ThingName == name)
                 .Select(thing => thing.ThingId).FirstOrDefault();

Если строка не возвращается, возвращается значение по умолчанию для скаляра (как правило, ноль в случае ненулевого числа).

0 голосов
/ 24 июня 2009

Попробуйте использовать FirstOrDefault () для таких запросов. Он вернет значение по умолчанию для выбора, если ничего не будет возвращено. 0 для чисел, ноль для объектов.

...