如何将表达式传递给LINQ查询?

enk*_*tor 3 c# linq

我可以将Expression传递给LINQ Select()方法:

public IQueryable<T> GetInfo(long limit, Expression<Func<MyType, T>> selector)
{
    return DbSet.Where(t => t.id < limit).Select(selector)
}
Run Code Online (Sandbox Code Playgroud)

如何使用LINQ样式的查询来做同样的事情?

public IQueryable<T> GetInfo(long limit, Expression<Func<MyType, T>> selector)
{
    var result = from t in DbSet
                 where t.id < limit
                 select selector(t) // doesn't work
    return result
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 7

那么你可以使用:

var result = (from t in DbSet
             where t.id < limit
             select t).Select(selector);
Run Code Online (Sandbox Code Playgroud)

...但你不能只用选择内部查询表达式,做为所隐含包装,你不想额外的层.

目前尚不清楚为什么你想在这里使用查询表达式,请注意 - 我强烈建议你对这两种LINQ样式感到满意并使用当时更合适的东西 - 在这种情况下你是原始样式码.

  • @enkryptor:它确实回答了这个问题:你*不能*在查询表达式中使用它......基本上你不需要.如果您可以更清楚地了解为什么要这样做,我们可以提供替代方案...... (5认同)