2013-12-12 56 views
0

在下面的方法中,我嘗試從一種類型的對象中選擇特定的ID。以上所有的工作,但最後一部分,我把查詢中的對象交給特定對象類型(T)的列表會產生問題,下面的方法也不接受我的輸入。我可以想象,在運行時這應該都可以正常工作,但visual-studio不接受它。如何以正確的方式移交我的對象類型?

private static Guid[] SelectiveQuery<T>(Guid[] ga, T input, string a) 
    { 
     List<T> li = new List<T>(); 

     foreach (Guid g in ga) 
     { 
      var query = from produkt in Entity.ProduktCollection.produktCollection 
         let p = produkt as Entity.Produkt 
         from version in p.version 
         let v = version as Entity.Version 
         from customer in v.customerCollection 
         let c = customer as Entity.Customer 
         from fehler in v.fehlerCollection 
         let f = fehler as Entity.Fehler 
         select new {p, v, c, f}; 

      switch (a) 
      { 
       case "produkt": 
        query = query.Where(x => x.p.id == g); break; 
       case "version": 
        query = query.Where(x => x.v.id == g); break; 
       case "customer": 
        query = query.Where(x => x.c.id == g); break; 
       case "fehler": 
        query = query.Where(x => x.f.id == g); break; 
       case "kategorie": 
        query = query.Where(x => x.f.kategorie.id == g); break; 
      } 

      query = query.Where(x => x.GetType() == typeof(T)); 

       li.AddRange(query); //contains error ("System.Collections.Generic.IEnumerable<AnonymousType#1>" can't be converted to "System.Collections.Generic.IEnumerable<T>" 
     } 
     // Reduce() removes duplicates in li and returns the list 
     li = Reduce(li, i => i.id); //contains error (T doesn't contain a definition for id) 
     // Guids() makes a list of all IDs inside li and returns this List<Guid> 
     return Guids(li, i => i.id); //contains error (T doesn't contain a definition for id) 
    } 
+1

對於「T不包含id的定義」,我認爲你應該使用「where T:」和一個接口來定義id必須可用。 –

+0

@Thomas W.你能舉個例子嗎?我不是很確定,我知道你的意思 –

回答

0

您是否嘗試將ToList()語句添加到where語句?

query = query.Where(x => x.GetType() == typeof(T)).ToList(); 

我記得Where語句的結果是一個過於泛型的集合,因此它需要先演員。

由於我看到您正在使用AddRange,它可能還需要轉換爲數組,如果第一個不起作用,則使用ToArray()語句而不是ToList()語句。我不確定您是否可以向AddRange()語句提供List。

+0

.ToList()和.ToArray()不工作 –

+0

我已經看得更深一點,我相信它與選擇新{ p,v,c,f}。 我不知道結果會包含什麼內容,但是不能將其粘貼到定義的類中嗎? X可以是該類的一個實例,因此該查詢將包含該類的集合。我也相信這個類必須是T的基類 – FoxHound

相關問題