LINQ:不能通过.Contains过滤List <model>数据

时间:2016-02-29 05:46:53

标签: c# sql linq generics lambda

我有五个模型(表格)。我想选择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)。

1 个答案:

答案 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));

这将解决您的问题。