2014-09-28 61 views
1

我有一个C#应用程序,它使用Linq-to-SQL连接到SQL Server 2008数据库。linq-to-sql;处理从ExecuteQuery返回的单个值

我需要通过执行ExecuteQuery函数的查询从数据库中获取单个值。 ExecuteQuery返回IEnumerable<>,我试图使用(First(),FirstOrDefault(),Single()等)得到返回列表的第一项,但没有任何工作,总是抛出一个InvalidCastException

DataClasses1DataContext dc = new DataClasses1DataContext(); 
<long> ll = dc.ExecuteQuery<long>(@"SELECT IDENT_CURRENT('invoice_glass_lens')"); 

唯一的例外是,即使使用.First()或其他方法之前抛出列表LL包含什么。看来,这个问题是由试图分配一个值IEnumerable产生的,我只是不知道该怎么办>

+0

根据http://msdn.microsoft.com/en-us/library/ms175098.aspx上的文档,它看起来像返回值是一个'double'或'decimal',而不是一个'长'。你尝试过吗? – 2014-09-28 09:38:07

+0

而根据http://msdn.microsoft.com/en-us/library/bb361109.aspx,它看起来像你可能需要返回一个属性的对象,而不只是一个值。 – 2014-09-28 09:41:17

+0

如果按照设计的方式使用Linq-2-sql,通常不需要该ID。真正的目的是什么?你插入一个新的实体,并需要该ID?在这些情况下,只需返回实体 – Pleun 2014-09-28 16:13:12

回答

0

由于IDENT_CURRENT回报NUMERIC(38,0),你需要使用一个decimal在.NET来办理退换货值:

using (DataClasses1DataContext dc = new DataClasses1DataContext()) 
{ 
    decimal? ll = dc.ExecuteQuery<decimal>(@"SELECT IDENT_CURRENT('invoice_glass_lens')").FirstOrDefault; 
}