C# 从Linq到实体选择Linq到XML?

C# 从Linq到实体选择Linq到XML?,c#,.net,linq,entity-framework,linq-to-xml,C#,.net,Linq,Entity Framework,Linq To Xml,在混合使用Linq到SQL和Linq到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))); XElement xml = n

在混合使用Linq到SQL和Linq到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)));
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)));
在将一些东西转换为EF时,我现在遇到了一个例外:“LINQtoEntities中只支持无参数构造函数和初始值设定项。”

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

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

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

这种方法是正确的。要稍微缩短它,可以直接在对象上使用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)));

进行投影时,请使用LINQ对对象进行渲染。为此,只需事先调用
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)));

在表中创建一个行列表在这里太过分了,因为该列表在枚举之外从未真正被使用过。@JeffMercado Correct。在这种情况下,TLIST是过度的,因为查询在Add中被消耗,所以不需要考虑顺从。