2014-07-27 156 views
0
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子句字段。Linq select返回where子句字段

探查視圖

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 
+0

cid字段有聚簇(IX_INDEX)索引。因爲這個原因? – AbbA

+0

這一行這裏將添加一個where子句AbbA = AbbA.Where(q => q.t1.cid == x); – orangesherbert

回答

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(); 
+0

你好,@ Twisted Inferno, >>爲什麼生成的sql包含where子句? 是的! cid字段是索引字段。我嘗試了另一個提交的where子句,它沒有被返回。 – AbbA

+0

我很抱歉,但我不太明白你在說什麼 – orangesherbert