4

我当前的数据库解决方案包括三个名为Establishment,的表Feature和一个名为 的链接多对多表EstablishmentFeature(因为一个机构可以有许多特征,并且一个特征可以存在于多个机构中)。

我需要生成一个查询,该查询返回仅满足某些条件的机构,即哪些机构具有基于传入的 featureId 集合的 X 功能。机构必须具有正在搜索的所有功能,即。AND不是OR条件。

我得到了 SQL 来达到预期的结果,但我正在努力解决 LINQ(最好是lambra)等价物。T-SQL 是:

SELECT e.[EstablishmentId], e.[Name], e.[Description]
FROM Establishment e
INNER JOIN EstablishmentFeature ef
ON e.[EstablishmentId] = ef.[EstablishmentId]
WHERE ef.[FeatureId]  in ('20', '15', '72')
GROUP BY e.[EstablishmentId], e.[Name], e.[Description] 
HAVING COUNT(*) = 3

我尝试使用 Linqer 转换 SQL,但 Linqer 在尝试转换时崩溃。我尝试重新安装 Linqer,但在尝试编译 LINQ 语法时它崩溃了。(虽然更简单的转换工作)。还尝试使用 LinqPad 计算出 LINQ 等价物,但我最终追上了我的尾巴……

这是我必须使用PredicateBuilder的东西吗?有点筋疲力尽,如果有一个简单的解决方案让我无所适从,我不想经历 PredicateBuilder 学习曲线。

4

1 回答 1

4

我会试试这个(对于所有给定的 id,有任何(= 至少一个)具有这个给定 id 的功能):

var establishments = context.Establishments
    .Where(e => featureIds.All(fid => e.Features.Any(f => f.FeatureId == fid)))
    .ToList();

featureIds是一个IEnumerable<int>正在搜索的 Id。)

于 2013-09-11T17:44:26.847 回答