Linq to sql 查询从数据库返回SQL表达式而不是值?
我在数据库的表中有一个整数列,我想选择它,但它给了我一个无法从int转换为string的异常 示例我想从Linq to sql 查询从数据库返回SQL表达式而不是值?,linq-to-sql,casting,Linq To Sql,Casting,我在数据库的表中有一个整数列,我想选择它,但它给了我一个无法从int转换为string的异常 示例我想从Category表中选择CategoryID,其中CategoryName=“Cat” categoryID是int&categoryName是string 我尝试的linq查询 string Category_ID = (from p in StaticVa.new_data_context.Categories where p.C
Category
表中选择CategoryID
,其中CategoryName=“Cat”
categoryID
是int&categoryName
是string
我尝试的linq查询
string Category_ID = (from p in StaticVa.new_data_context.Categories
where p.CategoryName == Category_Name
select p.CategoryID).ToString();
它返回了“选择[t0].[CategoryID]\r\n从[dbo].[Category]中选择[t0].[CategoryName]=@p0\r\n”
试试看
int Category_ID = (from p in StaticVa.new_data_context.Categories
where p.CategoryName == Category_Name
select p.CategoryID).FirstOrDefault();
LINQ试图返回与where子句匹配的每个id的IQueryable,如果您只需要一个id,则需要将其指定为single或first
(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?
,在这种情况下FirstOrDefault()
将返回空值
但是,如果您确定它至少返回一行,那么您可以说
int Category_ID = catIds.First();
int Category_ID = catIds.Single();
如果你确定它只返回一行,那么你可以说
int Category_ID = catIds.First();
int Category_ID = catIds.Single();
您可以发布一些简短的代码吗?您当前的代码将生成SQL语句-它尚未获取任何数据!您需要对表达式调用
.First()
或.FirstOrDefault()
或.ToList()
,才能对其进行实际计算(对数据库运行查询如果在数据库中找不到Category\u Name
会发生什么?如何将null
值分配给int
变量?@marc\u公平点,我想我应该将其设置为可为null的int,尽管如果不存在,它默认为0@marc_s其默认值或非默认值或null
所以default(int)
是0
不是null
@marc\u有趣的是,我有一个测试应用程序,它可以工作,你的int字段可以为null吗?对不起-我的错-我的测试应用程序显式转换为int?
-它可以按照你的编码方式工作!我不知道Linq转换为SQL会“自动”将.FirstOrDefault()
中的null
转换为默认值(int)
-谢谢!您的第一条语句并不完全正确-此代码还没有返回任何内容!它只是建立了一个表达式,可以执行…但只有在调用.FirstOrDefault()
或.ToList()时才会执行它
在上面