Linq to Sql 选择具有多个 id 之一的映射项
本文关键字:id 映射 Sql to 选择 Linq | 更新日期: 2023-09-27 18:33:27
有大脑锁定,需要一个简单/快速的答案 - 我可能从错误的一端看待这个问题,但本周我有很多事情要做。
使用 linq-to-sql,我有一个表,其中包含通过映射表映射到许多类别的项目。
我现在需要提取映射到多个类别的所有项目,但仅提取映射到所有所需类别的项目。这是对原始简报的更改,该简报旨在提取映射到任何类别 ID 的数据。
例:
人员 A 映射到类别 1、类别 2 和类别 3人员 B 映射到类别 1 和类别 3
因此,如果我选择类别 1 和 2,则返回两个人的项目,但是如果我选择 1、2 和 3,则只应返回人员 A。
这是返回任何项目的原始(简化(代码:
IList<Person> results = (from a in data from b in a.CategoryMappings
where catIDs.AsEnumerable().Contains(b.CategoryID)
select a).Distinct().ToList();
catID 是从发送到查询的数据中获取的IList<int>
,可以是任意长度。数据要么是智商。
知道我如何构建此查询吗?
T
编辑:这不是有效的 LINQ to SQL,而是 LINQ to Objects。无论如何,作为灵感的来源可能会有所帮助。
您可以使用相交方法:
var results = (from a in data
where catIDs.Intersect(a.CategoryMappings).Count() == catIDs.Count
select a).Distinct().ToList();
它返回两个可枚举的交集,基本上应该和catIDs
一样长。
这是
怎么回事?Mudu用完全相同的解决方案击败了我,所以这是我的选择。
仅当 catID 列表中的所有元素都满足条件时,才从数据中选择对象,即 p.CategoryMappings 必须包含该元素。
var results = from p in data
where catIds.All(i => p.CategoryMappings.Contains(i))
select p;