EntityFramework を使用すると、次の構文を使用して特定の種類のエンティティのリストを取得できます。
List<Customer> customers = ((IQueryable<Customer>)myEntities.Customers
.Where(c => c.Surname == strSurname)
.OrderBy(c => c.Surname)).ToList<Customer>();
次に、次のようなことを行って、関心のあるデータのみを取得できます。
var customerSummaries = from s in customers
select new
{
s.Surname, s.FirstName, s.Address.Postcode
};
要求された要約データを構成するフィールド (および必要に応じてテーブル) のリストstring
(ユーザーの選択に基づく) が与えられます。たとえば、上記の「customerSummary」の場合、string
提供される s のリストは「Surname」、「FirstName」、「Address.Postcode」になります。
私の質問は次のとおりです。文字列のリストを、指定されたフィールドのみを抽出するために必要な構文に変換するにはどうすればよいですか?
それができない場合、正しい情報を抽出できるように、列のリストの (文字列よりも) 良い型は何でしょうか?
それが理にかなっていれば、EF [エンティティ|テーブル]の[メンバー|列|フィールド]のタイプを知る必要があると思います。
編集:
次の構文を使用して、提案された回答-動的linqを試しました
string parmList = "Surname, Firstname, Address.Postcode";
var customers = myEntities.Customers.Select(parmList)
.OrderBy("Address.Postcode");
しかし、これは次の結果になります:EntitySqlException was unhandled. 'Surname' could not be resolved in the current scope or context. Make sure that all referenced variables are in scope, that required schemas are loaded, and that namespaces are referenced correctly.
というわけで、補足質問です。私はSelect
きちんと使っていますか?Where
and句を使用した例しか見たことがありませんがOrderBy
、それらに基づいて正しくやっていると思います。
私の Select 構文が問題ではない場合、誰でも問題を確認できますか?
編集2:それは逆さまでした。これは機能します:
string parmList = "Surname, Firstname, Address.Postcode";
var customers = myEntities.Customers
.OrderBy("Address.Postcode")
.Select(parmList);