c# - Linq在对象数组上搜索
问题描述
我正在尝试创建一个能够搜索对象数组的 linq 查询。这就是我可以在 SQL 上做的事情
select * from Compliance c
join ComplianceDetail cd on cd.ComplianceID = c.ComplianceID
join ComplianceDetailAnswer cda on cd.ComplianceDetailID = cda.ComplianceDetailID
where cda.ComplianceQuestionValue like '%test%'
如您所见,层次结构是Compliance
一对多ComplianceDetail
和ComplianceDetail
一对多ComplianceDetailAnswer
。我想在ComplianceDetailAnswer
桌子上搜索,但我不知道如何在 linq 中进行搜索。
这是我的原始代码,但我正在搜索Compliance
表本身
compliances = await _contextProvider.Context.Compliances
.Where(c.IncidentReportID.ToString().Contains(searchText) || searchText == null)
.ToListAsync();
这只是在Compliance
表上搜索,但我希望能够在其子表上搜索ComplianceDetailAnswer
解决方案
您可以轻松地在 LINQ 中编写它。以下是使用查询语法的示例:
var result = from c in Compliance
join cd in ComplianceDetail on c.ComplianceID equals cd.ComplianceID
join cda in ComplianceDetailAnswer on cd.ComplianceDetailID equals cda.ComplianceDetailID
where cda.ComplianceQuestionValue.Contains("test")
select new { c, cd, cda };
如果您需要调用Skip
并将Take
表达式简单地包装到括号中,并且您可以链接其他 LINQ 方法
var result = (from c in Compliance
join cd in ComplianceDetail on c.ComplianceID equals cd.ComplianceID
join cda in ComplianceDetailAnswer on cd.ComplianceDetailID equals cda.ComplianceDetailID
where cda.ComplianceQuestionValue.Contains("test")
select new { c, cd, cda }).Skip(1).Take(100);
推荐阅读
- sql - 生日 SQL 函数
- node.js - 意思:我可以在 app.use() 中注册多个迷你路由器应用程序吗?
- json - 将 JSON.Stringify 转换为 Number 错误
- azure - Vue CLI 3.0 - 天蓝色部署
- python - 在顶级conftest之外添加pytest选项的方法?
- python-3.x - 在 PIL 中显示多个图像
- css - Css 在 Chrome 和 Firefox 中选择框
- javascript - 仅屏蔽 9 位数字
- java - 从 5.x 升级到 7.x 后,Twilio 无法处理多个 Auth 帐户
- sql-server - 序列是否有像 min_active_rowversion 这样的函数?