тот же Linq для двух столов - PullRequest
0 голосов
/ 24 мая 2010

Мне нужно сделать что-то вроде этого,

Мои две таблицы имеют одинаковую подпись, но разные классы, поэтому предполагается, что она работает, но она не работает.

var myTable;

if (booleanVariable == true)
{
     myTable = table1;
}
else
{
     myTable = table2;
}


var myLinq1 = from p in myTable
          join r in myOtherTable
          select p;

В этом случае я должен инициализировать myTable

Я тоже пробовал,

var myTable= table2;

if (booleanVariable == true)
{
     myTable = table1;
}

var myLinq1 = from p in myTable
          join r in myOtherTable
          select p;

тогда var - это тип table2, тогда его нельзя изменить на тип table1.

Мне нужна помощь, я не хочу копировать весь код. запрос linq огромен и содержит 5 или 6 запросов. также я должен сделать это на 12 различных методов.

Большое спасибо за вашу помощь.

1 Ответ

0 голосов
/ 24 мая 2010

Не знаю, сработает ли это, никогда не пробовал, но ...

Если оба класса могут реализовывать один и тот же интерфейс или совместно использовать базовый класс, не могли бы вы сделать:

var q = (booleanVariable) 
    ? from p in myTable1 select (ISomeInterface)p 
    : from p in myTable2 select (ISomeInterface)p;

Если вы используете это часто, вы можете поместить его в свой собственный метод - я верю, что он вернет IQueryable .

Затем подключиться к остальной части запроса LINQ, используя методы LINQ вместосинтаксис LINQ C # (т. е. OrderBy () вместо orderby).Я просто не знаю, будет ли LINQ-to-SQL достаточно умным, чтобы перевести это в правильный SQL-запрос.

Но я согласен с комментарием Джона - это, вероятно, плохой дизайн, и его следует пересмотреть.Если вы не можете реорганизовать сами таблицы, и если вам нужен только доступ для чтения, как насчет представления, объединяющего две таблицы, то свяжите это представление с вашей структурой LINQ-to-SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...