【问题标题】:Expression tree with sql query带有 sql 查询的表达式树
【发布时间】:2013-01-07 22:38:34
【问题描述】:

我正在尝试创建一个表达式树,它将通过我的名为 test 的表查看 Foo 列中的所有字符串“电子邮件”。我几乎从 msdn 复制了一些小改动,但无法让它在我的表中搜索。让这个表达式树搜索的任何帮助都会很棒。非常感谢

名为Test的表结构

id int
foo char(10)

错误

类型“System.Linq.Queryable”上没有通用方法“Where”与提供的类型参数兼容

var s = new m2Entities().Test
var queryableData = new m2Entities().SaleLogs.AsQueryable<SaleLog>();
ParameterExpression pe = Expression.Parameter(typeof(string), "foo");
Expression left = Expression.Call(pe, typeof(string).GetMethod("ToLower", System.Type.EmptyTypes));
Expression right = Expression.Constant("bar");
Expression e1 = Expression.Equal(left, right);

MethodCallExpression whereCallExpression = Expression.Call(typeof(Queryable),
                                                           "Where",
                                                           new Type[] { queryableData.ElementType },
                                                           queryableData.Expression,
                                                           Expression.Lambda<Func<string, bool >>(e1,new ParameterExpression[] { pe }));
var results = queryableData.Provider.CreateQuery<string>(whereCallExpression);

【问题讨论】:

  • 您是否尝试过手写相同的表达式?那会是什么样子?提示:你不能在实际上不是 string 的东西上调用 string.ToLower()
  • @svick 使用普通的 linq 查询 m2Entities().Test.FirstOrDefault(x => x.Foo =='bar'); ???正常的 linq 查询工作得很好
  • 但是您正在构建的查询中没有x.Foo。它实际上类似于foo =&gt; foo.ToLower() == "bar"
  • 我还没有完全理解表达式树,但是 msdn 页面并没有表明我需要“x”,我确实在第 3 行有“foo”来匹配我想要的列继续搜索。
  • stackoverflow.com/questions/1246576/dynamic-where-for-listt/… 是对我最有帮助的答案,以防其他人需要这个。

标签: c# .net expression-trees


【解决方案1】:

您尝试像这样调用Where

Queryable.Where<SaleLog>((string pe) => pe.ToLower() == "bar")

这是不对的。应该是:

Queryable.Where<SaleLog, bool>((SaleLog pe) => pe.foo.ToLower() == "bar")

错误信息暗示了这一点:

类型“System.Linq.Queryable”上没有通用方法“Where”与提供的类型参数兼容

完全准确。

【讨论】:

    猜你喜欢
    • 2018-09-24
    • 2021-06-22
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多