2012-02-01 96 views
0

我在記憶列表加入一個表的和想要創建結果的匿名類型。我一起加入了兩個數據源,但我不確定使用匿名類型的內存列表中的屬性所需的語法。的LINQ to SQL,在內存列表和匿名類型

這裏是我的代碼

 public DataKeys(IEnumerable<Element> elements) 
    { 
     var defsource = new DefinitionSource(); 
     var items = from def in defsource.Definitions 
        where elements.Select(el=> el.Value).Contains(def.Name)       
        select new { def.Key }; 
     ... 

    } 

(顯然,「元素」是元素和「DefinitionSource」的內存列表是圍着一張桌子的包裝。)這工作得很好,但你可以看到有內存列表中沒有屬性。我已經試過這

 var items = from def in defsource.Definitions 
        where elements.Select(el=> el.Value).Contains(def.Name) 
        from el in elements 
        where el.Value.Equals(def.Name) 
        select new { el.NodeType, def.Key }; 

,但在運行時它一族一個「{」局部序列不能在LINQ被用來查詢經營者的SQL實現除包含運營商。「}」

那麼,什麼是我需要這樣做的語法?

許多THX IA

西蒙

回答

1

這可能幫助:

var def=defsource.Definitions 
        .Where(a=>elements.Select(el=>el.Value).Contains(a.Name)) 
        .ToList(); 
var items = from d in def 
      from el in elements 
      .Where(a=>a.Value==d.Name) 
        select new { el.NodeType, d.Key }; 
+0

thx但沒有......它沒有。看起來和我自己一樣,只是沒有查詢語法。 – 2012-02-01 08:16:31

+0

對不起。非常再多更新答案 – Arion 2012-02-01 08:44:42

+0

THX。 – 2012-02-01 09:05:26

1

要查詢了兩個數據源兩者都需要在內存都是他們應該在數據庫中。你可以做到以下幾點,以達到你想要的結果

var query = (from def in defsource.Definitions 
        where elements.Select(el=> el.Value).Contains(def.Name) 
       ).ToList();//bring filtered result in memory 
var Items = from def in query //Definitions are already filtered no need to re-apply where 
      from el in elements.Where(a=>a.Value == def.Name) 
      select new {el.NodeType, def.Key}; 
+0

THX VM。很有幫助。只需要在初始查詢中選擇def。 – 2012-02-01 09:04:46