【问题标题】:Select Linq-to-XML from Linq-to-Entities?从 Linq-to-Entities 中选择 Linq-to-XML?
【发布时间】:2012-02-13 15:50:37
【问题描述】:

在混合 Linq-to-SQL 和 Linq-to-XML 时,我曾经能够做这样的事情:

XElement xml = new XElement("People");

xml.Add(from p in Context.People
        select new XElement("Person",
            new XElement("Id", p.Id),
            new XElement("Name", p.Name)));

在将一些东西转换为 EF 时,我现在得到了这个异常:“LINQ to Entities 中仅支持无参数的构造函数和初始化程序。”

这让我相信我现在需要做这样的事情:

XElement xml = new XElement("People");

var peopleResults = Context.People.Select(p => { p.Id, p.Name }).ToList();

xml.Add(from p in peopleResults
        select new XElement("Person",
            new XElement("Id", p.Id),
            new XElement("Name", p.Name)));

这是我现在唯一的选择,还是有另一种更简洁的方式在代码中表达这一点?

【问题讨论】:

    标签: c# .net linq entity-framework linq-to-xml


    【解决方案1】:

    在进行投影时使用 LINQ to Objects。为此,只需事先致电AsEnumerable()

    XElement xml = new XElement("People");
    
    xml.Add(from p in peopleResults.AsEnumerable()
            select new XElement("Person",
                new XElement("Id", p.Id),
                new XElement("Name", p.Name)));
    

    【讨论】:

      【解决方案2】:

      方法是正确的。为了稍微缩短它,您可以直接在对象上使用 ToList 方法。

      XElement xml = new XElement("People");
      
      xml.Add(from p in Context.People.ToList()
              select new XElement("Person",
                  new XElement("Id", p.Id),
                  new XElement("Name", p.Name)));
      

      【讨论】:

      • 在这里创建表中行的列表将是多余的,因为该列表从未真正在枚举之外使用。
      • @JeffMercado 正确。在这种情况下 ToList 是多余的,因为查询是在 Add 中使用的,不需要考虑尊重。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-27
      • 2011-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多