2009-11-01 64 views
0

我寫了一個小查詢,並在Linqpad工作良好,但(見下文)關稅不作爲Iqueryable返回,有誰知道如何解決這個問題?LINQ;迫使新的{}返回Iqueryable?

主要看關稅=新的....,

from v in House 
join gvt in 
    (from t in MyTariffs where t.Id == 3 select t) 
on v.IdTariff equals gvt.Id 
select new 
{ 
    Id = v.Id, 
    Tariffs = new 
    { 
    Deposit = gvt.CurrentDeposit 
    } 
} 

我曾嘗試這一點,但它的無效,因爲GVT是不是表的東西?

from v in House 
join gvt in 
    (from t in MyTariffs where t.Id == 3 select t) 
on v.IdTariff equals gvt.Id 
select new 
{ 
    Id = v.Id, 
    Tariffs = from x in gvt // NOTICE i am doing from x in gvt... But it fails.. 
    select new 
    { 
    Deposit = gvt.CurrentDeposit 
    } 
} 

當然GVT包含只是我想是因爲它的內部連接的值...

我所能做的只是直接從我的MyTariffs拉(工作返回IQueryable的),但是我有太多很多信息,因爲它沒有考慮我在gvt中做的連接?

from v in House 
join gvt in 
    (from t in MyTariffs where t.Id == 3 select t) 
on v.IdTariff equals gvt.Id 
select new 
{ 
    Id = v.Id, 
    Tariffs = from x in MyTariffs // THIS has nothing to do with my join 
    select new 
    { 
    Deposit = gvt.CurrentDeposit 
    } 
} 
+0

重複http://stackoverflow.com/questions/1647079 - 再次詢問完全相同的問題並不是一個好主意。我仍然希望能夠再看看你的問題。 – 2009-11-01 13:55:58

+0

對不起,jon,我一直拉東西左右中心,並提出了一個新的查詢完全不同的方式......好吧,我要分配問題關閉... – 2009-11-01 14:26:28

回答

2

在子查詢中選擇數據 - 你確定標識== 3 標識== v.IdTariff?如果情況確實如此,那麼當v.IdTariff == 3時,你可以在外部查詢中添加一個where子句來僅選擇v。儘管如此,我假設你需要它們。

var q = from v in House 
     select new { 
      Id = v.Id, 
      Tariffs = (from g in MyTariffs 
         where g.Id == v.IdTariff 
         select g.CurrentDeposit) 
     }; 

分組示例(未編譯/未測試),以迴應您的意見。

var q = from v in House 
     join g in (from t in MyTariffs where t.Id == 3 select t) 
     group by v.Id into gvt 
     select new { 
      Id = gvt.Key, 
      Tariffs = gvt.g 
     }; 
+0

謝謝tvanfosson!問題是我有一些更復雜的聯繫furthr下來...是不可能做我在做什麼? – 2009-11-01 13:00:12

+0

嗨..我只是做了一些測試......並且似乎把子句放在了類似的地方,所以需要更長的時間來處理......我想這是合乎邏輯的,因爲我從MyTariffs中選擇這是一個沒有任何連接的完整表..我的查詢需要7秒,我的原始查詢不會返回Iqueryable和13秒的where ... – 2009-11-01 13:14:49

+0

如果您想從連接中的第二個表有一個可查詢的集合,您可能需要做一個按Id列分組,然後根據分組元素進行查詢。 – tvanfosson 2009-11-01 13:24:50