我需要做这样的事情,
我的两个表有相同的签名,但是不同的类所以它假设工作但它不起作用。
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种不同的方法做到这一点。
非常感谢你的帮助。
答案 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结构中。