2012-01-06 48 views
1

我有两个几乎完全相同的方法。唯一的缺点是where子句(和方法名称)。我刚刚包含了一个简化的linq查询。在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查询几乎完全相同的地方?

+0

这些是否需要单独调用?你不能使用where tableB.ref ==“blah”|| tableB.refb ==“blah” – 2012-01-06 14:15:09

回答

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"); 

您可以在一个。安迪查询这种方式,只是筛选主查询

+0

这可能会影响性能,因为您正在对完整结果集(由上一个查询返回)执行内存中子查询。 – 2012-01-06 14:13:15

+1

@ArnoldZokas不,你不是。查询尚未执行。 – Ray 2012-01-06 14:14:10

+0

同意决定什么是两个weavel中的较小者 – 2012-01-06 14:14:56

1

除非性能是一个问题,你可以让他们像现在这样。 这些看起来像简单的查询和重构它们会使代码不易读。

+0

我不同意,如果您必须更改查询,您必须在多个位置进行更改:( – 2012-01-06 14:13:01

+0

我会说这取决于使用情况和性能要求。 – 2012-01-06 14:14:06

相关问题