Linq, чтобы вернуть строку - PullRequest
13 голосов
/ 21 ноября 2011

Я не уверен, почему следующее не возвращает значение для Vend в виде строки.Когда я проверяю стоимость вендора, он говорит: System.Data.Objects.ObjectQuery``1[System.String]

     string vend = (from vnd in db.Vendors
             where vnd.VendorID == id
             select vnd.VendorName).ToString();

Когда я смотрю значение вендора, это не то, что я ожидал

Ответы [ 2 ]

33 голосов
/ 21 ноября 2011

Вы получаете IQueryable<String> обратно от вашего запроса. Вам нужен Первый или Одиночный или что-то:

string vend = (from vnd in db.Vendors
         where vnd.VendorID == id
         select vnd.VendorName).First().ToString();

ToString не требуется, если VendorName является строкой.

string vend = db.Vendors.Single(vnd => vnd.VendorID == id); // more terse 

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

FirstOrDefault вернет первую запись или значение по умолчанию для ожидаемого типа, без исключения.

Single вернет первую запись набора, но сгенерирует исключение, если в наборе более одной записи или если набор пуст.

SingleOrDefault вернет первую запись набора или значение по умолчанию для типа, если оно пустое, но выдаст исключение, если в наборе более одной записи. 1032 *

7 голосов
/ 21 ноября 2011

Вы вызываете ToString () для самого запроса, а не для результата вашего запроса.Try

string vend = (from vnd in db.Vendors
where vnd.VendorID == id
select vnd.VendorName).First();

Получает первый результат запроса, который уже должен быть строкой (при условии, что VendorName является строкой).Таким образом, нет необходимости вызывать ToString ().

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