如何通过匹配多个条件来筛选LINQ查询

r3i60tvu  于 2023-05-26  发布在  其他
关注(0)|答案(1)|浏览(161)
var userDistricts = db.UserDistricts.Where(x => x.UserId == userId).ToList();
var availableDistricts = userDistricts.Select(y => y.DistrictId).Distinct().ToList();
var availableStudyYears = userDistricts.Select(y => y.StudyYearId).Distinct().ToList();

// This part doesn't work as-is. Needs to filter down the query based on whether or
// not both district and study year match an entry from the UserDistricts table.
query = query
    .Where(c => availableDistricts.Contains(districtId) &&  
                availableStudyYears.Contains(studyYearId));

我有一个名为UserDistricts的表,它记录了学生应该访问的地区和学年。这里是一个例子的数据从它...

地区和学年是与其他表中的数据相匹配的id。
我试图做一个查询,过滤掉另一个包含大量数据的表,只返回用户应该通过匹配UserDistricts表中的学年和地区来访问的数据。
例如:如果有两个地区,一个称为Shady Oaks,一个称为Sunny Maple,则用户可以拥有Shady Oaks 2022,Shady Oaks 2023,Sunny Maple 2019,Sunny Maple 2022。查询最初包含这些地区所有年份的所有数据,我需要将其过滤为仅匹配地区和年份的数据(例如,用户不应该在查询结果中看到Sunny Maple 2023)。
有什么帮助可以使查询部分正确吗?

stszievb

stszievb1#

将查询合并为一个。而不是分别查询地区和研究年份,他们必须在同一时间为每个条目检查。

query = query
    .Where(
        c => db.UserDistricts.Any(x =>
            x.UserId == userId &&
            x.DistrictId == c.districtId &&
            x.StudyYearId == c.studyYearId)
    );

这还将导致对服务器的单个调用,而不是三个。

相关问题