两张桌子的Linq相同

时间:2010-05-24 05:22:21

标签: linq-to-sql

我需要做这样的事情,

我的两个表有相同的签名,但是不同的类所以它假设工作但它不起作用。

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 :(得分:0)

不知道这是否有效,从未尝试过,但是......

如果两个类都可以实现相同的接口或共享基类,那么你可以这样做:

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

如果你经常使用它,你可以把它放到自己的方法中 - 我相信它会返回IQueryable< ISomeInterface>。

然后使用LINQ方法而不是LINQ C#语法(即OrderBy()而不是orderby)连接到LINQ查询的其余部分。我只是不知道LINQ-to-SQL是否足够聪明,可以将其转换为正确的SQL查询。

但我同意Jon的评论 - 这可能是糟糕的设计,应该重新审视。如果你不能自己重新组织表,并且如果你只需要读访问权限,那么将两个表联合在一起的视图如何,然后将该视图绑定到LINQ-to-SQL结构中。