【问题标题】:LINQ: Can't filtering List<Model> data by .ContainsLINQ:无法通过 .Contains 过滤 List<Model> 数据
【发布时间】: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


【解决方案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));

这将解决您的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 2011-02-09
    • 2013-12-01
    • 1970-01-01
    相关资源
    最近更新 更多