c# - 带有排除过滤器的通用 linq 查询
问题描述
我的数据库表中有一个用于软删除的模式。我想生成 Linq 查询来获取未过期的数据。
例如,对于下面的两个表,一个用户可以有多个地址。可以通过将 SoftDeleteDate 设置为 Datetime.Now 来软删除地址。在获取用户时,我们可以创建一个查询以排除 UserAddress,其中 UserAddress.SoftDeleteDate 不为空。
TABLE [dbo].[User](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[FirstName] [nvarchar](25) NOT NULL,
[SoftDeleteDate] [datetimeoffset](7) NULL
)
TABLE [dbo].[UserAddress](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[UserId] [bigint] NOT NULL,
[StreetName] [bigint] NOT NULL,
[City] [nvarchar](50) NULL,
[State] [nvarchar](50) NULL,
[SoftDeleteDate] [datetimeoffset](7) NULL
)
这是一个简单的用例。在实践中,诸如用户之类的实体可以链接到子实体以进行若干程度的嵌套。
使用 DbContext 可以轻松创建用于获取的通用方法。这些方法使用“包含”获取嵌套实体。但是 linq 没有“排除”的概念
T GetDataById<T>(long id)
{
return Context.Set<T>().Find(id);
}
我想创建一个生成 Linq 查询的通用方法,该方法将任何过期的子实体排除在不超过三度的嵌套中。这样,当我获取用户时,我可以排除过期的用户地址。
我看过一些关于 PredicateBuilder http://www.albahari.com/nutshell/predicatebuilder.aspx的帖子,但不确定它是否可以用来生成带有所需过滤器的查询。
想知道那里有没有人解决过这个问题。
解决方案
推荐阅读
- python - 如何在python上计算字符串方程,包括+、-、*、/不带eval
- java - Java 8 方法引用默认方法实现
- javascript - 从 ftp 客户端拖放到 Web 浏览器
- c# - 将 XML 读入数据集
- google-play - 默认会使用什么轨道 Google Play Developer API?
- android - Kotlin 函数接收两个数字并返回它们的和和相乘
- powerbi - M语言的EPOCH时间
- c# - 如何在 C# 中的 SAP GUIContainerShell 上设置当前单元格?
- webpack - 在 SharePoint 框架 WebPart 中引用图像
- php - MySQL 身份验证方法错误 - 缓存 SHA-2