2012-02-13 10 views
3

のLINQを-SQL-に混合し、LINQのツーXMLでは、私はこのような何か行うことができるように使用される:EFにいくつかのものを変換するにはLinq-to-Entitiesから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))); 

を、私は今、この例外を取得:「のみのパラメータなしのコンストラクタと初期化子は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))); 

は、これが今の私の唯一の選択肢である、またはコードでこれを表現する別のきれいな方法はありますか?

答えて

3

アプローチは正しいです。少し短くするには、オブジェクトの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))); 
+0

テーブル内の行のリストを作成することは、リストが実際に列挙を超えて使用されることはないため、残念です。 –

+0

@JeffMercado Correct。 ToListは、このケースでは、クエリがAdd内で消費されており、批評を考慮する必要がないため、過剰な使用です。 –

6

プロジェクションを行うときに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))); 
関連する問題