C# 如何调用任意LINQ to SQL查询

C# 如何调用任意LINQ to SQL查询,c#,.net,linq,linq-to-sql,C#,.net,Linq,Linq To Sql,假设我使用任意查询的表达式,是否可以以某种方式调用它 MyContext ctx1 = new MyContext("..."); var q = from t in ctx1.table1 where t.id = 1 select t; Expression qe = q.Expression; var res = Expression.Invoke(qe); 这引发了: ArgumentException“无法调用System.Linq.IQueryable`1[…]”类型的表达式”

假设我使用任意查询的表达式,是否可以以某种方式调用它

MyContext ctx1 = new MyContext("...");
var q = from t in ctx1.table1 where t.id = 1 select t;
Expression qe = q.Expression;
var res = Expression.Invoke(qe); 
这引发了:

ArgumentException“无法调用System.Linq.IQueryable`1[…]”类型的表达式”


我的最终目标是在几个不同的数据上下文上计算同一查询。

表达式由LINQtoSQL提供程序解析并转换为。我的猜测是,有人明确提出了一个例外——Microsoft不打算直接调用这些表达式(您可以使用确认)。

如果您的目标是在不同的上下文中运行表达式,为什么不创建这样的表达式:-

    Expression<Func<MyClass, bool>> myExpression = x => x.id == 1;
Expression myExpression=x=>x.id==1;

然后您可以使用它做任何您喜欢的事情,包括在.Where()子句中使用它。

查询不是表达式。查询具有ExpressionTree

查询不是要调用的方法

可以枚举查询,从而产生结果。此代码将枚举任何IQueryable:

List<object> result = query.Cast<object>().ToList();
List result=query.Cast().ToList();

我的最终目标是评估 对多个不同数据的相同查询 上下文

然后,您应该将查询编写为接受DataContext作为参数的查询生成器

Func<MyDataContext, IQueryable<Customer>> queryGen =
    (dc) => dc.Customers.Where(c => c.Name == "Bob");
  //now we can get some queries
IQueryable<Customer> query1 = queryGen(new MyDataContext());
IQueryable<Customer> query2 = queryGen(new MyDataContext());
Func查询=
(dc)=>dc.Customers.Where(c=>c.Name==“Bob”);
//现在我们可以得到一些查询
IQueryable query1=queryGen(新的MyDataContext());
IQueryable query2=queryGen(新的MyDataContext());

查询不仅仅是WHERE子句。我需要任意查询。是否声明属性IQueryable.Expression不存在?访问查询表达式以篡改DataContext就像拆解汽车发动机以打开收音机一样。