有没有更好的方法来编写这个 Linq 查询

2024-02-14

Example

from O in db.Orders
join C in db.Customers on C.Id equals O.CustID
Where O.ord_date == ( filter.OrderDate != null ? filter.OrderDate : o.ord_date) &&
  c.Id == (filter.CustId != null ? filter.CustId : c.Id) &&
  o.ProductId == ( filter.ProductId != null ? filter.ProductId : o.ProductID)
select new {o,c}

//select new {c.Name, C.JoinDate, O.Value, O.NoofLineItems }

当我打开配置文件时,它有很多案例陈述,正如我所期望的那样。但我对在 C# 中输入的条件有更多的控制权,我怎样才能对 where 条件进行控制,并且仅在过滤器可用时才放置 where 条件

这将提高我进入数据库的 sql 的质量。

亲切的问候 维奈。


此类问题的一般解决方案是使用谓词生成器 http://www.albahari.com/nutshell/predicatebuilder.aspx动态构造适当的谓词。

首先,构建谓词:

Expression<Func<Order, bool>> predicate = PredicateBuilder.True<Order>();

if (filter.OrderDate != null)
    predicate = predicate.And(o => o.ord_date == filter.OrderDate);

if (filter.CustId != null)
    predicate = predicate.And(o => o.CustId == filter.CustId);

...

然后你的查询就变成:

var filtered = db.Orders.Where(predicate);

var query = from O in filtered 
            join C in db.Customers on C.Id equals O.CustID
            select new {o,c};      
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有更好的方法来编写这个 Linq 查询 的相关文章

随机推荐

  • VBA Excel - 无法在重叠选择上使用该命令

    我的代码似乎可以工作 但它突出显示了我的最后一行代码 并显示 运行时错误 1004 无法在重叠选择上使用该命令 我尝试了在网上找到的一些各种更改 但似乎无法修复该错误 Sub Delete EEE Dim Wrds As Variant G
  • ^a-zA-Z0-9 不包括空格?

    我试图找到段落中不是 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 且不是空格 gi 的所有内容 a zA Z0 9 gi 上面的方法不行 您还可以尝试 a z
  • 单元测试中什么是正向测试和负向测试

    我对 TDD 还很陌生 我看到一些文档提到了阳性测试 阴性测试 边界测试等 有人能告诉我阳性测试和阴性测试之间的区别吗 有没有关于不同类型测试的参考资料 我不是在找书 阳性检测 通过提供有效的测试系统 数据 阴性检测 通过提供无效的测试系统
  • 在容器内运行 Chromium:libGl 错误

    我正在尝试在 docker 容器内运行 Chromium 这是我得到的输出 Created new window in existing browser session libGL error failed to open drm devi
  • 如何处理 Windows Phone 7 上的后退按钮

    在 Windows Phone 7 模拟器上 当按下硬件后退按钮时 默认行为是关闭当前应用程序 我想覆盖此默认行为 以便它导航到我的应用程序中的上一页 经过一些研究 似乎应该可以通过重写 OnBackKeyPress 方法来做到这一点 如下
  • 要 Segue 还是 didSelectRowAtIndexPath?

    下面是我当前正在运行的代码 我有一个带有导航控制器 表格视图控制器和视图控制器的故事板设置 我正在尝试将名称从我为表设置的 NSDictionary 传递到详细视图控制器 我应该使用prepareforsegue还是didselectrow
  • Elasticsearch 对相同文档给出不同的分数

    我有一些具有相同内容的文档 但是当我尝试查询这些文档时 尽管查询的字段包含相同的文本 但我得到了不同的分数 我已经解释了分数 但我无法分析和找到不同分数的原因 我的查询是 curl localhost 9200 acqindex searc
  • 如何在 Node.js 项目中自动执行编译 Twitter Bootstrap 等前端框架的任务?

    如何在 Node js 项目中自动执行编译 Twitter Bootstrap 的任务 我正在编辑 LESS 文件 这些文件编译成 Node js 项目的 Bootstrap 自定义版本 因此我不能只使用在线定制器或预编译的 JavaScr
  • 带有通用列表的 Java 参考作业

    我觉得问这个问题很愚蠢 但我就是 线路List
  • Python WordCloud 遇到 AttributeError: 'list' 对象没有属性 'items'

    当我使用WordCloud函数 fit words 时 我遇到了AttributeError list object has no attribute items 当我使用 generate from frequencies 时它也不起作用
  • Rspec:运行测试时如何抑制警告和通知?

    我之前使用 Mysql 数据库 决定切换到 Postgresql 现在 当我使用 rspec 运行测试时 我收到很多警告和通知 WARNING there is already a transaction in progress NOTIC
  • 在 Windows 中查找相对于另一个的路径

    这个问题应该是显而易见的 但我还没有能够解决它 我需要一个函数 它接受两个参数 每个参数一个文件路径 相对或绝对 并返回一个文件路径 该文件路径是相对于第二个路径 开始 解析的第一个路径 目标 解析的路径可能是相对于当前目录的 也可能是绝对
  • 使用 JavaScript 进行动态 Adsense 插入

    我不敢相信这有多难找到 但即使在谷歌开发者文档中我也找不到它 我需要能够动态地 only使用 JavaScript 插入 adsense 我也在 StackOverflow 上查看过 其他一些人也问过这个问题 但没有回复 希望这将是一个更好
  • Xml命名空间声明:自动替换包名

    我有一个带有多个构建目标的 android 项目 使用 ant 出于测试目的 这些构建目标都有不同的包名称 因此我的包名称是 com mycompany myapp 用于发布构建 和 com mycompany myapp test 用于测
  • 保留文件夹结构 Cocoa Pods

    我通过本教程创建了一个简单且私有的 Pod http pablin org 2013 05 18 cocoapods for internal libraries http pablin org 2013 05 18 cocoapods f
  • Docker运行找不到可执行文件“uwsgi”

    我正在尝试使用 Docker 部署 falcon 应用程序 这是我的 Dockerfile FROM python 2 onbuild Set the working directory to app WORKDIR app Copy th
  • 如何在终端中显示 git 用户 (oh-my-zsh)

    我很喜欢 oh my zsh 并享受其中飞船提示 https github com denysdovhan spaceship prompt 就像它显示我的 git 分支和状态一样 我怎样才能让它在旁边显示我当前的 git 用户 之所以问这
  • Django:将 Javascript 添加到自定义小部件的最佳方法

    我正在编写一个自定义小部件 它需要一些支持 javascript 代码 我需要在某个地方输出这些代码 选项有 将其转储到 html 代码之后 将其附加到表单的媒体 将其附加到全局onReady部分 我的直觉是避免以下事情
  • 如何使用 boost::filesystem 获取 inode?

    我想检测我是否已经看到了一个文件 并且想用一些独特的东西来识别它 在 Linux 下 有 inode 号和设备 ID 参见stat or fstat 我想在 Windows 下我会找到类似的东西 为了简单起见 boost filesyste
  • 有没有更好的方法来编写这个 Linq 查询

    Example from O in db Orders join C in db Customers on C Id equals O CustID Where O ord date filter OrderDate null filter