c# - 如何将表达式传递到 LINQ 查询中?

标签 c# linq

我可以将表达式传递给 LINQ Select() 方法:

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

如何使用 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
}

最佳答案

你可以使用:

var result = (from t in DbSet
             where t.id < limit
             select t).Select(selector);

...但是您不能只在查询表达式内部使用选择器,因为它隐式包装了您不需要的额外层。

不清楚您为什么要在这里使用查询表达式,请注意 - 我强烈建议您熟悉这两种 LINQ 风格并使用当时更合适的任何一种 - 在这种情况下就是您拥有的风格在您的原始代码中。

关于c# - 如何将表达式传递到 LINQ 查询中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35223245/

相关文章:

c# - 如何在解决方案C#中获取另一个项目的绝对路径

c# - 返回新的 LINQ 对象

c# - 使用已编译的 Lambda 表达式而不是 Activator.CreateInstance 来初始化 SoapHttpClientProtocol 对象

c# - 如何为通用列表 orderby 函数创建委托(delegate)?

c# - LINQ:不同值和合并值

c# - 使用 linq 或 subsonic 计算距离

c# - 监视应用程序一段时间后停止接收 UI 自动化事件,然后在一段时间后重新启动

c# - 无法对 C# 中的数组值进行算术运算

c# - 如何在 MVC5 中设置用户的 SecurityStamp?

c# - 从字符串解析 DateTime 时遇到问题