LINQ to Entities 选择新建
Posted
技术标签:
【中文标题】LINQ to Entities 选择新建【英文标题】:LINQ to Entities Select New 【发布时间】:2012-07-14 07:37:52 【问题描述】:public static object ExecuteScalar(string SQL)
try
var A = new EGModel.EGEntity().Connection;
var command = ((EntityConnection)(A)).StoreConnection.CreateCommand();
command.CommandType = System.Data.CommandType.Text;
command.CommandText = SQL;
if (((EntityConnection)(A)).StoreConnection.State == System.Data.ConnectionState.Closed)
((EntityConnection)(A)).StoreConnection.Open();
return command.ExecuteScalar();
catch return null;
public object MFICHE(int ID)
var i = from b in IConnection.EGEntity().fiche
where (m.ID== ID)
select new b.Date, m.Name, Addresss = IConnection.ExecuteScalar("SELECT main.F_ADDRESS(4588)") ;
return i;
我收到错误:
LINQ to Entities 无法识别方法“System.Object ExecuteScalar(System.String)”方法,并且该方法无法转换为存储表达式。 为什么我收到错误?
但 Addresss = "ASASAS" 正在运行?
【问题讨论】:
可能重复:***.com/questions/6998957/… 是“main.F_ADDRESS(4588)”任何函数或sp 是的,F_ADDRESS是mysql函数, 我认为返回匿名对象是不合法的……你需要在方法内部进行处理 您是否尝试过直接在 db 中查询“SELECT main.F_ADDRESS(4588)”。有用吗? 【参考方案1】:问题是从您的查询生成的表达式树包含对您的 ExecuteScalar
方法的调用 - 实体框架表达式解析器对此一无所知。它不会查看内部该方法以了解它在做什么 - 它只知道调用存在,并且因为无法翻译而失败。
您通常不想为查询返回的每个结果执行单独的 SQL 语句吗?您有一个明显的“N+1 选择”问题。
如果您知道您只有一个结果(由于 ID 约束),您可以将相关数据提取到一个对象中并然后执行第二个查询:
public object MFICHE(int ID)
var query = from b in IConnection.EGEntity().fiche
where b.ID == ID
select new b.Date, b.Name ;
// You only expect a single result, right?
var result = query.Single();
// Shouldn't this be using something to do with the result?
var address = IConnection.ExecuteScalar("SELECT main.F_ADDRESS(4588)");
return new result.Date, result.Name, Address = address ;
顺便说一句,在以I
开头的类型中包含静态方法是非常奇怪的,这通常是一个接口。另外,这段代码:
catch return null;
是可怕 - 你应该捕获特定异常,记录它们,然后通常重新抛出它们。几乎永远不适合就好像什么都没出错一样继续下去。
【讨论】:
嗨 JonSkeet,为什么我收到错误“数据源是无效类型。它必须是 IListSource、IEnumerable 或 IDataSource。” @cnrars:嗯,你还没有展示你在做什么的结果,或者你在哪里得到了那个例外。如果您在列表视图或类似的东西中绑定到 this,您希望将结果放在列表中 - 但在这样的列表中绑定 单个值 很奇怪。以上是关于LINQ to Entities 选择新建的主要内容,如果未能解决你的问题,请参考以下文章
使用 Linq to Entities (EF6) 动态选择列名
LINQ to Entities - 选择用户的所有朋友以及他们之间的聊天
使用Linq to Entities在一个请求中选择计数和计数
在 Linq-to-Entities 查询中格式化日期会导致异常
LINQ to Entities 无法识别方法“System.TimeSpan Subtract(System.DateTime)”方法