DynamicObject LINQ查询不适用于自定义类!

时间:2010-07-29 18:02:45

标签: linq dynamic

带有List的DynamicObject LINQ查询编译正常:

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 =(来自db中的动态d,其中d.FirstName ==“John”选择d);

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您可以添加一个类型,用于编写查询。

答案 2 :(得分:0)

我相信你的问题是,在你使用List&lt;&gt;的第一个表达式中,所有内容都是在内存中使用IEnumerable&amp;链接到对象。

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

换句话说,尽管看起来很相似,但这两个陈述的做法完全不同,其中一个是允许的。一个不是。 (var y = x * 5;要么成功要么失败,具体取决于x是int还是字符串。

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

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