Entity framework 实体框架与部分硬编码的“连接”;关于;由于键值对?

Entity framework 实体框架与部分硬编码的“连接”;关于;由于键值对?,entity-framework,Entity Framework,所以我有这个: db.Table1 .Join(db.Table2, t1 => t1.id, t2 => t2.id, (t1, t2) => new { t1, t2 }) 但我需要做的是与属性值/键值表以及特定属性(如: SELECT * FROM Table1 t1 JOIN Table2 t2 ON t1.id = t2.id AND t2.attributeid = 123 如何限定attributeid=123部分?AWhere子句应该足够: db.T

所以我有这个:

db.Table1
  .Join(db.Table2, t1 => t1.id, t2 => t2.id, (t1, t2) => new { t1, t2 })
但我需要做的是与属性值/键值表以及特定属性(如:

SELECT * FROM Table1 t1
  JOIN Table2 t2 ON t1.id = t2.id AND t2.attributeid = 123

如何限定attributeid=123部分?

A
Where
子句应该足够:

db.Table1
    .Join(db.Table2, t1 => t1.id, t2 => t2.id, (t1, t2) => new { t1, t2 })
    .Where(x => x.t2.attributeId == 123);
理想情况下,表1应该有一个表2的导航属性:(HasOne或HasMany)

单数表2:

var result = db.Table1
    .Include(x => x.Table2)
    .Where(x => x.Table2.AttributeId == 123);
或者对于表2的集合

var result = db.Table1
    .Include(x => x.Table2s)
    .Where(x => x.Table2s.Any(t2 => t2.AttributeId == 123);
它将返回任何包含具有该属性的Table2的Table1

或者使用要筛选表2的集合:

var result = db.Table1
    .Where(x => x.Table2s.Any(t2 => t2.AttributeId == 123)
    .Select(x => new 
    {
        Table1 = x,
        FilteredTable2s = x.Table2s.Where(t2 => t2.AttributeId == 123).ToList()
    });

我想我要去哪里。我在想,可能有一个ON-where的等价物,它可以在到达where子句之前进行预过滤,但可能没有(甚至可能是ON没有像我认为的那样进行预过滤)。