Запрос возвращает выражение SQL, а не значение из базы данных? - PullRequest
0 голосов
/ 13 сентября 2011

У меня есть целочисленный столбец в моей таблице в базе данных, и я хочу выбрать его, но это дает мне исключение, которое не может преобразовать из int в строку

Пример Я хочу выбрать CategoryID изCategory таблица, где CategoryName="Cat"

categoryID - это int & categoryName - это строка

мой запрос linq, который я пытался

string Category_ID = (from p in StaticVa.new_data_context.Categories
                              where p.CategoryName == Category_Name
                              select p.CategoryID).ToString();

Возвращено "SELECT [t0].[CategoryID]\r\nFROM [dbo].[Category] AS [t0]\r\nWHERE [t0].[CategoryName] = @p0\r\n"

Ответы [ 2 ]

1 голос
/ 13 сентября 2011
(from p in StaticVa.new_data_context.Categories
                              where p.CategoryName == Category_Name
                              select p.CategoryID)

представляет выражение, которое при выполнении возвращает набор элементов.

, поэтому вы говорите:

var catIds = (from p in StaticVa.new_data_context.Categories
                              where p.CategoryName == Category_Name
                              select p.CategoryID);

, затем вы получаете первое (т.е.принудительно выполнить приведенное выше выражение и начать возвращать значения):

int? Category_ID = catIds.FirstOrDefault();

вам нужен int? в случае, если не возвращена первая строка, и в этом случае FirstOrDefault() вернет ноль.

Однако, если вы уверены, что он вернет по крайней мере одну строку , тогда вы можете сказать

int Category_ID = catIds.First();

И если вы уверены, что он вернет только одну строку тогда вы можете сказать

int Category_ID = catIds.Single();
1 голос
/ 13 сентября 2011

1001 * попробовать *

int Category_ID = (from p in StaticVa.new_data_context.Categories
                              where p.CategoryName == Category_Name
                              select p.CategoryID).FirstOrDefault();

LINQ пытается вернуть IQueryable каждого идентификатора, который соответствует предложению where, если вам нужен только один, вам нужно указать его как одиночный или первый

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