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没有像我认为的那样进行预过滤)。