查询返回SQL表达式而不是数据库中的值?

时间:2011-09-13 09:29:56

标签: linq-to-sql casting

我在数据库中的表中有一个整数列,我想选择它,但它给我一个不能从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 个答案:

答案 0 :(得分:1)

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

LINQ正在尝试返回与where子句匹配的每个id的IQueryable,如果您只需要将其指定为单个或第一个

答案 1 :(得分:1)

(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()将返回null。

但是,如果您确定它返回至少一行那么您可以说

int Category_ID = catIds.First();

如果您确定它只返回一行,那么您可以说

int Category_ID = catIds.Single();