LINQ:无法按 筛选列表<模型>数据.包含
本文关键字:模型 数据 包含 列表 筛选 LINQ | 更新日期: 2023-09-27 18:36:36
我有五个模型(表格)。我想选择Venue_Distrcit ID 为 1 的用户可以访问的所有培训。但我更喜欢如果可以用.包含像firstTrainingSet。我也练习过.Foreach 但无法修复正确的格式。
1. TRAINING 2. TRAINING_VENUE 3. DISTRICT
| ID | NAME | VENUE_ID | | ID | NAME | DCODE | | DCODE | NAME |
4. TRAINING_USER 5.TRAINING_USER_DISTRICT_MAPPING
|ID | NAME | | ID | USER_ID | DCODE|
var TRAINING_USER_ACCESSIBLE_DISTRICT_LIST =
(from trainingUserDistrictMappingTable in db.TRAINING_USER_DISTRICT_MAPPING
where (trainingUserDistrictMappingTable.TRAINING_USER_ID == 1)
select trainingUserDistrictMappingTable).ToList();
var trainingSet = db.TRAINING.Where(x => TRAINING_USER_ACCESSIBLE_DISTRICT_LIST.DCODE
.Contains(x.TRAINING_VENUE.DCODE));
在这里我需要训练集。x.TRAINING_VENUE。DCODE 表示 x 是 TRAINING 参数,并且可以获取x.TRAINING_VENUE,因为 TRAINING 表VENUE_ID是 VENU 表 ID 中的外键,并且x.TRAINING_VENUE。DCODE是场地表中的DOCDE。这实际上是区表的主键。TRAINING_USER_ACCESSIBLE_DISTRICT_LIST是来自区表的列表。我不能做的是TRAINING_USER_ACCESSIBLE_DISTRICT_LIST。目录。包含(x.TRAINING_VENUE。目录)。
正如你所TRAINING_USER_ACCESSIBLE_DISTRICT_LIST
是集合,所以表达式应该是:
var trainingSet = db.TRAINING
.Where(x => TRAINING_USER_ACCESSIBLE_DISTRICT_LIST
.Any(y => y.DECODE == x.TRAINING_VENUE.DCODE));
这将解决您的问题。