2012-02-01 37 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