Entity Framework Core - 在 Queryable 中使用扩展方法

2024-06-26

我有以下查询:

db.Users.AsQueryable()
    .Where(u => u.Id = userResolver.LoggedUserId() && u.Packages.Where(p => 
            p.StatusId == (int)PackageStatus.InProgress ||
            p.StatusId == (int)PackageStatus.Delivered ||
            p.StatusId == (int)PackageStatus.Shipped ||
            p.StatusId == (int)PackageStatus.Waiting) 
        .Sum(p => p.Price) > u.MaxCredit)
    .ToList()

我想要实现的目标是将所有包状态检查分组到扩展方法中。像这样的东西:

db.Users.AsQueryable()
        .Where(u => u.Id = userResolver.LoggedUserId() &&
             u.Packages.Where(p => p.IsShippedOrInProgress())
            .Sum(p => p.Price) > u.MaxCredit)
        .ToList()


 //This is the extension method
 public static bool IsShippedOrInProgress(this Package p) {
    return p.StatusId == (int)PackageStatus.InProgress ||
           p.StatusId == (int)PackageStatus.Delivered ||
           p.StatusId == (int)PackageStatus.Shipped ||
           p.StatusId == (int)PackageStatus.Waiting)
 }

当我查看第一个示例中生成的 sql 查询时,一切似乎都正常,但是当我使用第二种方法时,检查状态的查询部分不存在。


尝试这个方法,它将创建Expression, Package作为输入和bool作为输出:

public static System.Linq.Expressions.Expression<Func<Package, bool>> IsShippedOrInProgress()
{
    return p => p.StatusId == ( int )PackageStatus.InProgress ||
           p.StatusId == ( int )PackageStatus.Delivered ||
           p.StatusId == ( int )PackageStatus.Shipped ||
           p.StatusId == ( int )PackageStatus.Waiting);
}

像这样称呼它:

private void SomeMethod()
{
    db.Users.AsQueryable()
    .Where(u => u.Id = userResolver.LoggedUserId() &&
         u.Packages.Where(IsShippedOrInProgress())
        .Sum(p => p.Price) > u.MaxCredit)
    .ToList()
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Entity Framework Core - 在 Queryable 中使用扩展方法 的相关文章

  • 使用可加载内核模块修改帧缓冲区(/dev/graphics/fb0)参数

    Problem 我必须配置 Android 平台使用的各种 LCD 显示器 几乎在所有情况下 都没有针对感兴趣的 LCD 显示器免费提供的电气规格 但通过经验和逆向工程 可以很好地猜测参数 我正在尝试使用可加载内核模块来微调显示参数 也欢迎
  • 我们可以在 C# 中定义枚举的隐式转换吗?

    是否可以在 C 中定义枚举的隐式转换 可以实现这一目标的东西吗 public enum MyEnum one 1 two 2 MyEnum number MyEnum one long i number 如果没有 为什么不呢 有一个解决方案
  • 获取当前用户的 NetworkCredential (C#)

    我正在尝试从控制台应用程序调用 Web 服务 并且我需要向客户端提供System Net NetworkCredential object 是否有可能创建一个NetworkCredential启动应用程序的用户的对象而不提示输入用户名 密码
  • 在 2 个 .c 文件之间共享函数

    dir1有dir2 file1 c和file1 h dir2 有 file2 c 现在 如果我想在 file2 c 中访问 file1 c 中定义的函数 我需要在 file1 h 中声明它并在 file2 c 中包含 file1 h 这是一
  • 带方括号的 Uri.EscapeUriString

    这是一个奇怪的问题 但让我们看看它会得到什么样的回应 如果我编写一个控制台应用程序 VS 2013 NET 4 5 1 并执行这行代码 Uri EscapeUriString 我明白了 但是 如果我执行同样的事情 嗯 从技术上来说Uri E
  • 使用索引避免迭代器失效,维护干净的接口

    我创建了一个MemoryManager
  • 如何将 CroppedBitmap 转换为 BitmapImage

    我正在尝试将 CroppedBitmap 转换为 BitmapImage 编辑 不使用内存流 我尝试过直接转换它 似乎这不是一个选择 这应该没那么难 我正在尝试剪切 BitmapImage 的一部分 并创建一个仅包含新裁剪的 Bitmap
  • 在宏中使用 # [重复]

    这个问题在这里已经有答案了 请解释一下代码 include
  • 如何处理作为参数传递到方法中的 Lambda 表达式 - C# .NET 3.5

    我对 Lambda 表达式的了解有点不稳定 虽然我可以编写使用 Lambda 表达式 又名 LINQ 的代码 但我正在尝试编写自己的方法 该方法采用一些 Lambda 表达式类型的参数 背景 我正在尝试编写一个方法 该方法从任何其他对象类型
  • VS2010中VSHost.exe不断启动

    我正在 VS2010 中使用一个包含大量项目的解决方案 但它不断变得无响应 我注意到的一件事可能是一条线索 尽管我尚未开始任何调试 但 MyApplicationName vshost exe 不断出现在进程列表中 也许每当构建发生时它就会
  • 测试从 ComboBox 派生的自定义控件

    我创建了一个从 ComboBox 派生的控件 并希望对其行为进行单元测试 但是 它在我的单元测试中的行为似乎与实际应用程序中的行为不同 在实际应用程序中 Combobox DataSource 属性和 Items 同步 换句话说 当我更改
  • Linux C++ 调试器

    我正在寻找完美的 Linux C 调试器 我不期望成功 但搜索应该提供丰富的信息 我是一个非常有能力的 gdb 用户 但 STL 和 Boost 很容易压垮我的调试技能 并不是说我无法深入了解数据结构的内部结构 而是它需要很长时间 我通常会
  • 如何“全局”捕获对象实例中引发的异常

    我目前正在编写一个 winforms 应用程序 C 我正在使用企业库异常处理块 遵循我所看到的相当标准的方法 IE 在 Program cs 的 Main 方法中 我已将事件处理程序连接到 Application ThreadExcepti
  • argc 和 argv 在 Windows 中没有用吗?

    在 Linux 中 argc 和 argv 计算终端中的参数 但在 Windows 中 我找不到放置第二个参数的地方 事实上 每次我运行该程序时 它都会创建那个丑陋的黑色窗口 我什至没有机会给出任何争论 那么这两个变量在Windows平台下
  • Excel 2007 中的数值 - 底层 xml 文件中的表示与存储

    这个问题与 NET和OpenXml有关 我已经阅读了以下文章 它有很好的解释 但没有回答我的问题 Excel 2007 中数值的可视化与底层 xml 文件不一致 https stackoverflow com questions 58594
  • 除法时的小数舍入误差 (C#)

    我基本上有四个数字 比如 100 200 300 400 我需要计算概率为 100 100 200 300 400 200 100 200 300 400 等等在 当我使用小数数据类型来存储这些概率时 由于舍入问题 它们不会达到 1 在不使
  • 是否有理由为什么用 XmlInclude 修饰的基类在序列化时仍然会抛出类型未知的异常?

    我将简化代码以节省空间 但所提供的内容确实说明了核心问题 我有一个类 它的属性是基类型 有 3 个派生类可以分配给该属性 如果我将任何派生类分配给容器并尝试序列化容器 XmlSerializer 会抛出可怕的错误 类型 x 不是预期的 使用
  • 没有类型的 IEnumerable 属性

    我正在尝试创建一个类似于来自 MSDN 的官方 DataGrid ItemsSource 的属性 public IEnumerable ItemsSource get set 这提供了对任何派生类中任何类型的支持 有了这个 我可以设置类似的
  • 如何进行平衡组捕获?

    假设我有这个文本输入 tes tR R abc aD mnoR xyz 我想提取 ff 输出 R abc R xyz D mnoR xyz R R abc aD mnoR xyz 目前 我只能使用平衡组方法提取组内的内容 如中所示msdn
  • 从不同的线程访问对象

    我有一个服务器类 它基本上等待来自客户端的连接 在该类中 我创建了一个 NetworkStream 对象 以便能够从客户端接收字节 由于 NetworkStream Read 方法不是异步的 这意味着它将等到从客户端读取字节才能继续执行类似

随机推荐

  • 是否有与可移植类库一起使用的 RestSharp 实现?

    当我尝试使用 nuget 将 RestSharp 添加到可移植类库项目时 我得到以下信息 无法安装软件包 RestSharp 104 1 您正在尝试安装 这个包到一个目标项目中 NETPortable Version v4 0 Profil
  • 为什么 ColdFusion 的设计者决定从 1 而不是从 0 开始索引数组?

    我只是很好奇这一点 有谁知道他们为什么打破惯例 谢谢 夏兰 Cory 如果你知道谁潜伏在 StackOverflow 上 你会感到惊讶 你说得非常对 CFML 的最初设计是为了允许非程序员构建复杂的 Web 应用程序 ColdFusion
  • Android - 滑动删除RecyclerView

    我正在尝试实现与 Gmail 应用程序 滑动到存档 相同的滑动删除功能 我尝试了很多教程 但没有一个像 gmail 那样运行得那么快 我不喜欢在外部库上工作 我该怎么做 Edit 到目前为止我的代码 ItemTouchHelper Simp
  • 如何正确调用 LsaLogonUser 进行交互式登录?

    我正在尝试使用 LsaLogonUser 创建交互式登录会话 但它总是返回STATUS INVALID INFO CLASS 0xc0000003 从网上查到的内存布局KERB INTERACTIVE LOGON结构很棘手 但我很确定我做得
  • 将环境变量从 fastlane 传递到 Xcode 构建阶段脚本

    是否可以 如果可以 如何 将环境变量从运行 fastlane 的脚本传递到 Xcode 运行脚本阶段 我的最终目标是在运行脚本阶段读取当前的 git 分支名称 我们的 CI 由 Team Foundation Server 运行 它执行以下
  • ListView选择单个项目,wpf

    我有一个列表视图 它的项目源是一个列表 我希望用户只选择一项 当我将列表视图的 SelectionMode 设置为 single 时 用户仍然可以选择多个项目 并且列表视图似乎变得疯狂并选择用户未选择的项目 看起来很奇怪 任何人都知道可能是
  • 捕获非特定异常(例如 System.Exception)是一种不好的做法吗?为什么?

    我目前正在进行代码审查 下面的代码让我跳了起来 我发现这段代码存在多个问题 你是否同意我的观点 如果是这样 我该如何向我的同事解释这是错误的 顽固型 捕获一般异常 Exception ex 使用 if ex 是某物 而不是另一个 catch
  • CSS 底部边框悬停“抖动”

    我有一个导航栏 当您将鼠标悬停在导航按钮上时 我想给它一个橙色的底部边框 唯一的问题是 每当您悬停时 边框都会使内容 导航按钮 抖动 这是不应该的 另外 我的导航栏上已经有一个黑色的底部边框 因此无法更改它 HTML div ul li a
  • 关闭表单多选按钮单击 vuejs

    我有 vue 材质多选的 html 设计 我希望单击按钮即可关闭多选选项 Here is my design 我试过这个 methods selectAgents this refs selectAgent el children 0 cl
  • 数据库设计:循环依赖

    想象一下以下数据库 表 companies 包含字段 id name 和旗舰产品 ID 表 products 有字段 id name 和 company id 一家公司必须有一款旗舰产品 1 1关系 所有产品都有一个公司 1 N关系 当使用
  • 如何找出在哪个提交中添加了特定代码?

    我想知道我在哪个提交中添加了下面给出的代码 if getListView getChildCount 0 getActivity findViewById android R id empty setVisibility View VISI
  • 为什么我的 Delphi FindDialog 中的光标没有变成沙漏形?

    我只是用以下命令打开 FindDialog FindDialog Execute 在我的 FindDialog OnFind 事件中 我想将光标更改为沙漏以搜索大文件 这可能需要几秒钟 所以在 OnFind 事件中我这样做 Screen C
  • C# 如何判断单元格中的公式是否有错误

    在 Excel 公式中 您可以使用 ISERR A1 or ISERROR A1 在 VBA 宏中 您可以使用IsError sheet Cells 1 1 但是使用 VSTO Excel Addin 项目我没有在 Microsoft Of
  • Delphi XE3,丑陋的 StringGrid 边框

    与 Delphi 7 相比 为什么 XE3 中的 String Grid 边框如此不清晰 如何解决这个问题 Delphi 2010 之后所有的网格都是主题化的 要在网格上禁用新主题 您必须设置属性 在对象检查器中将 DrawingStyle
  • Z3:消除不关心的变量

    我有一个 test smt2 文件 set logic QF IDL declare const a Int declare const b Int declare const c Int assert or lt a 2 lt b 2 c
  • 动态更新 spring bean。是否可以?

    如果 spring bean 配置发生变化 有没有办法动态更新 Spring bean 例如 假设我有一个具有布尔属性的 spring beanx春豆有其价值true当应用程序启动时 所以 spring 创建了具有该属性的 beanx设置为
  • scikit-learn 中跨多列的标签编码

    我正在尝试使用 scikit learnLabelEncoder对 pandas 进行编码DataFrame字符串标签 由于数据框有许多 50 列 我想避免创建LabelEncoder每列的对象 我宁愿只拥有一件大的LabelEncoder
  • 如何在 Ubuntu 16.04 上设置 Docker + PhpStorm + xdebug

    我的问题是当我开始监听端口时 xdebug 不起作用 我认为 PhpStorm 无法与 xdebug 链接 我刚刚得到调试器面板变量不可用 看来 xdebug 没有正确设置 使用的软件及版本 Ubuntu 16 04 LTS Docker
  • iOS 64 位 @try {... } @catch {...} 不起作用

    我有一个非常特殊的问题 最近 我向我的 iOS 项目 arm64 添加了 64 位支持 从那时起 我开始收到内部代码段未捕获的异常 try catch 我使用 Crashlytics 进行崩溃报告 我设法在应用程序中的任何位置使用以下代码行
  • Entity Framework Core - 在 Queryable 中使用扩展方法

    我有以下查询 db Users AsQueryable Where u gt u Id userResolver LoggedUserId u Packages Where p gt p StatusId int PackageStatus