我需要建立一个LINQ查询,它允许我改变连接表上的where子句,但是找不到办法做到这一点。应用动态where子句加入表
两个查询我构造的简化例子有:
var myQuery = from tab1 in context.Table1
join tab2 in context.Table2 on Table1.ID equals Table2.Table1ID
where tab1.TypeCode == 3
tab2.SomeID == 4 &&
select tab1.ID;
var myQuery2 = from tab1 in context.Table1
join tab2 in context.Table2 on Table1.ID equals Table2.Table1ID
where tab1.TypeCode == 3
tab2.SomeOtherID == 4 &&
select tab1.ID;
它们之间唯一的区别是tab2.SomeID where子句更改tab2.SomeOtherID。
如果更改where子句被应用到tab1我可以在查询中添加一个.Where但我该如何使用通用查询并指定不同的tab2 where子句?
我实际上使用这种方法,并认为L2S将删除冗余的条件。然而,它没有,并且在SQL中有1 == 0的地方并不重要,我希望有一个更清晰的方法。 – sipwiz 2010-07-09 11:53:46
再次检查您的查询 - 除非您使用Linq-to-SQL的“编译查询”,否则L2S应该消除查询中不必要的部分。 (即,可以在客户端进行评估的部分) – KristoferA 2010-07-10 03:09:45
L2S在消除查询的不必要部分方面不是那么复杂。我必须减少表达式是LINQ为true或false来让它们消除。尽管这是我能找到的最好的方法。 – sipwiz 2010-07-12 01:30:09