2013-09-26 55 views
0

我有表:LINQ到實體無法識別方法 '的Int32 get_Item(Int32)已' 方法例外

遊客

Tourist_ID 

2.Name 

Extra_Charges

1.Extra_Charge_ID 
2.Description 
3.Amount 

Toutist_Extra_Charges

1.Tourist_ID - foreign key 

    2.Extra_Charge_ID - foreign key 

所以我有一個ID列表,我想用遊客的名字和遊客的名字和所有extra_charges(他們的描述和數量)指定ID。 所以當我有很多在這裏許多關係是我的代碼,這使我有以下異常:

List<int> reTouristID = new List<int>(); 
      reTouristID.Add(86); 
      reTouristID.Add(87); 

     for (int i=0;i<reTouristID.Count;i++) 
     { 
        var db2 = new excursionEntities3(); 

     var tourist = db2.Tourist.Include("EXTRA_CHARGES").SingleOrDefault(t => t.Tourist_ID==reTouristID[i]); 

        if (tourist != null) 
        { 

          lblproba.Text += "Name " + tourist.Name_kir; 
        } 

        var extrachargess = tourist.EXTRA_CHARGES.Select(e => new {e.Extra_Charge_Description,e.Amout}); 
        foreach (var extra in extrachargess) 
        { 
         lblproba.Text += "Des: " + extra.Extra_Charge_Description; 
         lblproba.Text += "AMM:" + extra.Amout; 

        } 

      } 
+1

什麼異常,並在代碼什麼線? –

回答

2

這是在這一行:

SingleOrDefault(t => t.Tourist_ID==reTouristID[i]) 

引擎蓋下,reTouristID[i]是一種方法,get_Item ,這是EF無法轉化爲SQL的許多CLR方法之一(應該如何?)。的解決辦法是簡單:

var index = reTouristID[i]; 
var tourist = db2.Tourist.Include("EXTRA_CHARGES") 
       .SingleOrDefault(t => t.Tourist_ID == index); 
+0

謝謝!還有一個問題 - 你認爲我的查詢是否足夠好,或者我可以考慮優化 –

+1

不,看起來不錯。包含很好。你可以使用'Include(t => t.EXTRA_CHARGES)'(即'Include'擴展方法)。 –

+0

謝謝!我即將發佈一個新的問題 - 是否可以在一個asp,net web forms項目中使用Ado.net和Entity Framewwork。因爲我開始認爲我使用Select @@ Identity時收到的異常 - 「無法評估表達式,因爲代碼已經優化或本機框架位於調用堆棧之上」 –

0
for (int i = 0; i < Data.Count(); i++) 
        { 
         var d = Data[i].Field; 
         var check = context.Data.Where(p => p.field.Contains(d)).ToList(); 
         if (check.Count == 0) 
         { 
          // Do Your Stuff for Existing Data 
         } 
         else 
         { 
          // Do Your Stuff for Non-Existing Data 
         } 
        } 
相關問題