テーブル 1 から個別のコード セットを取得し、コード フィールドに基づいてテーブル 2 からすべてのレコードを除外します。エレガントでクリーンなコードになるため、LINQ と匿名型の利点を利用したいと考えており、中間トランスポート クラスを作成しないようにしています。コードは次のようになります。
//In db repository
public static IQueryable DataQuery()
{
var args = db.Table1.Select(x => new { x.Code }).Distinct();
return db.Table2.Where(r => args.Contains(r.Code));
// Contains extension not allow use args implicitly!
}
メソッドの呼び出し:
public void GetData()
{
var data = Repository.DataQuery();
var result = data.Select(d => new
{
Value = d.Code,
Text = d.Name
});
// the same problem here, Select wants only explicitly specified args!
}
どうすれば適切な方法で、できるだけきれいに行うことができますか? 主に、コード例には 2 つの問題があります。同じメソッドで匿名を引数として取り、それを別のメソッド/プロジェクトに返します。では、使用できない場合、匿名の使用は何ですか? すべてのチュートリアルで、anonymous が Console.WriteLine(...) として使用されていることがわかりますが、もちろん機能しますが、実際には画面に表示されるものがもっと欲しいです。
大きなテーブルから異なるエンティティ サブセットを除外したい場合、新しいクラスを作成する唯一の方法ですか?
既知の制限:
匿名は周囲のスコープでのみ使用できます。
動的は同じアセンブリでのみ役立ちます。
編集例:
public IQueryable DataQuery()
{
return dbContext.MyModel.Select(x => new { x.Code, x.Name }).Distinct();
}
MyModel 内の特定のプロパティに対してのみ、Iqueryable または ienumerable を返したいと考えています。