2010-07-29 49 views
0

DynamicObject LINQ查询编译罚款:DynamicObject LINQ查询不适用于自定义类!与List

List<string> list = new List<string>(); 
var query = (from dynamic d in list where d.FirstName == "John" select d); 

有了自己的自定义类,我们使用的“通常” LINQ编译器报告错误“表达式树不能包含动态 操作” :

DBclass db = new DBclass(); var query =(从动态d在db中where d.FirstName ==“John”select d);

我们应该添加什么来处理DynamicObject LINQ?

+0

什么是DBclass? – 2010-07-29 18:11:13

回答

0

您可以添加一个类型,写入查询。

1

DBClass是否实现IEnumerable?也许有一种方法,你应该调用返回一个IEnumerable集合?

0

我相信你的问题是,在第一个表达式中,你在哪里使用列表<>,一切都在内存中使用IEnumerable & Link-to-Objects完成。

显然,您的DBClass是使用Linq-to-SQL的IQueryable。 IQueryables使用表达式树来构建要发送到数据库的SQL语句。

换句话说,尽管看起来很相似,但这两个陈述是做了完全不同的事情,其中​​之一允许&一个不是。 (如果x是int或字符串,var y = x * 5;将成功或失败的方式很多)。

此外,您的第一个示例可能会编译,但据我所知,它在运行时会失败。这不是一个成功的特别好的基准。

我看到这个工作的唯一方法是如果使用链接到对象在IEnumerables上使用dynamic进行查询。 (将整个表加载到列表中,然后在列表中查询)