我有五个模型(表格)。我想选择ID为1的用户可以访问Venue_Distrcit的所有培训。但我更喜欢可以用.Contains解决,比如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));
我需要trainingSet。 x.TRAINING_VENUE.DCODE表示x是TRAINING参数,并且可以获取x.TRAINING_VENUE,因为TRAINING表的VENUE_ID是来自VENU表ID的外键,而x.TRAINING_VENUE.DCODE是来自场地表的DOCDE。这实际上是DISTRICT表的主键。 TRAINING_USER_ACCESSIBLE_DISTRICT_LIST是DISTRICT表中的列表。我不能做的是TRAINING_USER_ACCESSIBLE_DISTRICT_LIST.DCODE.Contains(x.TRAINING_VENUE.DCODE)。
答案 0 :(得分:1)
因为TRAINING_USER_ACCESSIBLE_DISTRICT_LIST
是集合所以表达式应该是:
var trainingSet = db.TRAINING
.Where(x => TRAINING_USER_ACCESSIBLE_DISTRICT_LIST
.Any(y => y.DECODE == x.TRAINING_VENUE.DCODE));
这将解决您的问题。