Linq select返回where子句字段

时间:2014-07-27 10:52:06

标签: sql linq dynamic

var AbbA = (from t1 in mdc.table1 
join t2 in mdc.table2 on t1.id equals t2.id
select new { t1, t2 }).AsQueryable();

if(a=1)
   AbbA=AbbA.Where(q=>q.t1.cid==x);
else
   AbbA=AbbA.Where(q=>q.t1.cid==y);

var Global=Abba.Select(q=> new{NewName1 = t1.field1, NewName2=t2.field2}).ToList();

我想只列出2个字段。但返回了2个字段和where子句字段。

Profiler视图

exec sp_executesql N'SELECT 
    [Extent1].[cid] AS [cid], >>> This is where clause filed
    [Extent1].[field1] AS [NewName1], 
    [Extent2].[field2] AS [NewName2]
    FROM  [dbo].[table1] AS [Extent1]
    INNER JOIN [dbo].[table2] AS [Extent2] ON [Extent1].[id] = [Extent2].[id]
    WHERE [Extent1].[cid] = @p__linq__0',N'@p__linq__0 int',@p__linq__0=10000

1 个答案:

答案 0 :(得分:0)

我想我理解你的问题......为什么生成的sql包含where子句?

此行将添加一个where子句,因为它仍然形成可查询的表达式树

AbbA=AbbA.Where(q=>q.t1.cid==x); 

如果要从生成的sql中删除where子句,然后在查询结束时添加ToList(),则可以使用linq对象来操作结果,然后您将在内存中操作实际对象已从sql中检索。

var AbbA = (from t1 in mdc.table1 
join t2 in mdc.table2 on t1.id equals t2.id
select new { t1, t2 }).ToList();