首页 新闻 会员 周边

ADO.NET Entity framework的查询问题

0
悬赏园豆:10 [已关闭问题]

有下面这么个Linq to entity

传入参数int[] idList,希望让ObjectQuery在数组查询,实现In操作,是这么写的:

 ObjectQuery<Application> query = MainDbGateway.Select<Application>("SELECT Value app from BridgeMain." + MainDbGateway.ApplicationSetName + " as app");


query = (ObjectQuery<Application>)query.Where(a => idList.Any(i => i == a.ApplicationID));
return query.Execute(MergeOption.NoTracking).ToList();

 

编译没问题,可惜运行时就遭遇了异常:

 

“System.NotSupportedException was unhandled by user code
Message="Unable to create a constant value of type 'Closure type'. Only
primitive types ('such as Int32, String, and Guid') are supported in this
context."
Source="System.Data.Entity"”

 

请问应该怎么写啊??

 

 

 

yyww的主页 yyww | 初学一级 | 园豆:197
提问于:2008-11-20 18:23
< >
分享
其他回答(1)
0

看看园子里"重典"的博客,对于LINQ to Entities不支持的Linq语法解决的总结

JimLiu | 园豆:300 (菜鸟二级) | 2008-11-20 22:19
0

看了好一会儿,应该算是明白你要做什么.在linq to entity 中的查询中的linq表达式是不支持 方法,对象常量详细见http://msdn.microsoft.com/en-us/library/bb738686.aspx;原因是这样的,linq查询表达式需要编译生成t-sql,对于方法和对象常量无法在生成t-sql之前进行解析或invoke,不过对于int ,string,datetime等值类型变量还是可以的,即ObjectQuery<Application> query = MainDbGateway.Select<Application>("SELECT Value app from BridgeMain." + MainDbGateway.ApplicationSetName + " as app"是没问题的,后面那句就不可以.还有对于你说将int[] 改为ObjectQuery<int>可以使用,我觉得很奇怪。

davin | 园豆:385 (菜鸟二级) | 2008-11-27 20:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册