Подтвердить что ты не робот

Linq для возврата строки

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

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

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

4b9b3361

Ответ 1

Вы получаете 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 вернет первую запись набора или значение по умолчанию для типа, если оно пуст, но будет генерировать исключение, если есть более одной записи в наборе.

Ответ 2

Вы вызываете ToString() в самом запросе, а не в результате запроса. Попробуйте

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

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