Рефакторинг рядом идентичных запросов linq, где предложение where отличается - PullRequest
1 голос
/ 06 января 2012

У меня есть два метода, которые почти идентичны. Единственным недостатком является предложение 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 для фильтрации. (Может потребоваться выполнить некоторые другие действия, чтобы убедиться, что нужное мне поле из таблицы B возвращено).

Есть ли лучший способ? Имеет ли значение, что у меня есть два запроса linq, которые почти идентичны, кроме где?

Ответы [ 2 ]

2 голосов
/ 06 января 2012

Да рефакторинг это к этому

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 голос
/ 06 января 2012

Если производительность не является проблемой, вы можете оставить их как есть.Это похоже на простые запросы, и их рефакторинг сделает код менее читабельным.

...