【发布时间】:2016-02-29 05:46:53
【问题描述】:
我有五个模型(表)。我想选择 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)。
【问题讨论】:
-
我认为问题在于您没有在模型中覆盖 Equals 方法,因此 Contains 方法将比较字段而不是引用
-
@Toddams 谢谢。但我不想用 = 符号覆盖模型。我只是在这里想将model.field与另一个相同类型的值进行比较。
-
您可以为每个模型实现 IEquatable
而无需覆盖“=”运算符 -
“也犯了错误”并没有告诉我们有关该错误是什么的任何信息。如果您提供minimal reproducible example,帮助您会容易得多。
-
当我选择选择 trainingUserDistrictMappingTable.DCODE 时可以,但是当只有模型选择 trainingUserDistrictMappingTable 时不能使用。包含在模型列出的数据中
标签: c# sql linq generics lambda