首页 > 解决方案 > 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一对多ComplianceDetailComplianceDetail一对多ComplianceDetailAnswer。我想在ComplianceDetailAnswer桌子上搜索,但我不知道如何在 linq 中进行搜索。

这是我的原始代码,但我正在搜索Compliance表本身

compliances = await _contextProvider.Context.Compliances
               .Where(c.IncidentReportID.ToString().Contains(searchText) || searchText == null)
               .ToListAsync();

这只是在Compliance表上搜索,但我希望能够在其子表上搜索ComplianceDetailAnswer

标签: c#linq

解决方案


您可以轻松地在 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);

推荐阅读