【问题标题】:LINQ to SQL, in memory lists and anonymous typesLINQ to SQL,内存列表和匿名类型
【发布时间】:2012-02-01 16:44:13
【问题描述】:

我正在将一个表加入到内存列表中,并希望从结果中创建一个匿名类型。我已经将 2 个数据源连接在一起了,但我不确定在匿名类型中使用内存列表中的属性所需的语法。

这是我的代码

        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 };
        ...

    }

(显然“elements”是内存中的元素列表,而“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 to SQL 实现中使用,但包含运算符除外。”}”

那么我需要什么语法来做到这一点?

很多感谢 IA

西蒙

【问题讨论】:

    标签: linq-to-sql anonymous-types


    【解决方案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 };
    

    【讨论】:

    • 谢谢,但没有......它没有。看起来和我自己的一样,只是没有查询语法。
    • 很抱歉。更新答案
    【解决方案2】:

    要查询两个数据源,它们都需要在内存中,它们都应该在数据库中。您可以执行以下操作以达到您想要的结果

    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};
    

    【讨论】:

    • 感谢虚拟机。有帮助。只需要在初始查询中选择一个定义。
    猜你喜欢
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多