2011-05-18 59 views
0

這段代碼有什麼問題? 我就上線此異常Linq表達式中的一個問題

無法創建 型 「System.Collections.Generic.IEnumerable`1」的恆定值。 在此上下文中僅支持基本類型('Int32, 字符串和Guid') 。

var query = from colT in dal.TBL_Gharardad 
      select colT; 

if(lstTarafeGharardadIds.Count>0) 
    query = from q in query 
      join id in lstTarafeGharardadIds on q.TarafeGharardadId equals id 
      select q; 

dgvListeGharardad.DataSource = query.ToList(); 

的lastTarafeGharardadIds是List<int>

我還考

dgvListeGharardad.DataSource = query; 

一切運作良好,如果if表達等於假,這段代碼

query = from q in query 
     join id in lstTarafeGharardadIds on q.TarafeGharardadId equals id 
     select q; 

不 跑。但我不明白我在最後一行的錯誤(這個代碼):

dgvListeGharardad.DataSource = query.ToList(); 
+0

格式的代碼,以便它是可讀的 - 那麼人們可能會更容易閱讀:) – 2011-05-18 14:00:43

+0

請格式化你的代碼,以使其更具可讀性。如果可能的話,也刪除不必要的部分 – Andre 2011-05-18 14:01:18

+0

當然............... – Saleh 2011-05-18 14:04:19

回答

2

我認爲LINQ不能在內存中的集合(lstTarafeGharardadIds)和數據庫表之間的連接的實際值(dal.TBL_Gharardad,DAL .v_Gharardad ...)。

類似的問題:Why won't this LINQ join statement work?

這應該工作:

var query = (from colT in dal.TBL_Gharardad select colT).AsEnumerable();; 
if (lstTarafeGharardadIds.Count>0) 
    query = from q in query 
      join id in lstTarafeGharardadIds on q.TarafeGharardadId equals id 
      select q; 
dgvListeGharardad.DataSource = query.ToList(); 
+0

thanks.really工程。 – Saleh 2011-05-18 14:09:18

+0

((great link))。 – Saleh 2011-05-18 14:11:02

0

哇,那太難看了!

總之,假設你的命名約定是正確的。最終:選擇colV。選擇列會導致選擇一個IEnumerable,而不是您的dataSource所需的原始值。

您可以嘗試使用的SelectMany選擇您需要

dgvListeGharardad.DataSource = query.SelectMany(x => x.[YourProperty]).ToList();