在where子句不同的情况下重构几乎相同的linq查询

时间:2012-01-06 14:06:56

标签: linq refactoring dry

我有两种几乎完全相同的方法。唯一的dffernece是where子句(和方法名称)。我刚刚提供了一个简化的linq查询。

from tableA in db.tableA
join tableB in db.tableB on tableA.id equals tableB.id
where tableB.ref == "blah"
select tableA

from tableA in db.tableA
join tableB in db.tableB on tableA.id equals tableB.id
where tableB.refb == "blah"
select tableA

有没有办法可以改变?我知道我可以从查询中删除那里,然后在返回结果后使用.notation来过滤。 (可能需要做一些其他的事情来确保我需要从tableB返回的字段。)

有更好的方法吗?我有两个linq查询除了where之外几乎完全相同是否重要?

2 个答案:

答案 0 :(得分:2)

是重构它

var data = from tableA in db.tableA
           join tableB in db.tableB on tableA.id equals tableB.id
           select tableA

var one = data.Where(x=>x.ref == "blah");
var two = data.Where(x=>x.refb == "blah");

通过这种方式,您可以在一个地方查询并过滤该主要查询

答案 1 :(得分:1)

除非性能受到关注,否则您可以保持现状。 这些看起来像简单的查询,重构它们会使代码的可读性降低。