1

クラスのプロパティ リストを関数に渡したい。プロパティ リストに基づく関数で、クエリを生成します。Linq Select メソッドとまったく同じ機能です。ここでは、これを Ingress データベースに実装します。

例として、

フロントエンドで、このように選択を実行したいのですが、

私のエンティティクラスはこのようなものです

public class Customer
{
    [System.Data.Linq.Mapping.ColumnAttribute(Name="Id",IsPrimaryKey=true)]
    public string Id { get; set; }

    [System.Data.Linq.Mapping.ColumnAttribute(Name = "Name")]
    public string Name { get; set; }

    [System.Data.Linq.Mapping.ColumnAttribute(Name = "Address")]
    public string Address { get; set; }

    [System.Data.Linq.Mapping.ColumnAttribute(Name = "Email")]
    public string Email { get; set; }

    [System.Data.Linq.Mapping.ColumnAttribute(Name = "Mobile")]
    public string Mobile { get; set; }
}

このような Select 関数を呼び出したいのですが、

var result = dataAccessService.Select<Customer>(C=>C.Name,C.Address);

次に、結果を使用して、Name プロパティと Address プロパティの値を取得できます。

私の Select 関数は次のようになるはずです。

(*これはLinq式を使用して行うべきだと思います。しかし、入力パラメーターと戻り値の型が何であるかわかりません。*)

Class DataAccessService
{
   // I'm not sure about this return type and input types, generic types.
   public TResult Select<TSource,TResult>(Expression<Func<TSource,TResult>> selector)
   {
        // Here I wanna Iterate through the property list, which is passed from the caller.
        // Here using the property list, 
        // I can get the ColumnAttribute name value and I can generate a select query.
   }
}

これは、Linq のような機能を作成する試みです。しかし、私はLinq式の専門家ではありません。

MIT からDbLinqと呼ばれるプロジェクトがありますが、それは大きなプロジェクトであり、それでもそこから役立つものを得ることができませんでした。

誰かがこれを始めるのを手伝ってくれませんか、または誰かがこれについて読むのに役立つリソースをリンクしてくれませんか。

4

1 に答える 1

1

あなたがしようとしているのは、Name と Address で構成される新しい匿名型を作成することです。これは、長い形式の linq を介して簡単に実現できます (より適切な説明がないため、この用語を作成しました)。Microsoft のサンプルを以下に示します。リンクは次のとおりです。

public void Linq11() 
{ 
    List<Product> products = GetProductList(); 

    var productInfos = 
        from p in products 
        select new { p.ProductName, p.Category, Price = p.UnitPrice }; 

    Console.WriteLine("Product Info:"); 
    foreach (var productInfo in productInfos) 
    { 
        Console.WriteLine("{0} is in the category {1} and costs {2} per unit.", productInfo.ProductName, productInfo.Category, productInfo.Price); 
    } 
}

詳細: Linq Select サンプル

更新: では、このようなことをしようとしていますか?

   var result = dataAccessService.Select<Customer>(c => c.Name, c => c.Address);

public object[] Select<TSource>(params Expression<Func<TSource, object>>[] selectors)
   {
       var toReturn = new object[selectors.Count()];

       foreach (var s in selectors)
       {
           var func = s.Compile();
           //TODO: If you implement Select a proper extension method, you can easily get the source
           toReturn[i] = func(TSource);
       }
        return toReturn;
   }

Select を DataAccessService の関数として実装しようとしている理由がわかりません。むしろこれを拡張メソッドとして作成しようとしていますか? これがあなたの言いたいことではない場合は、あなたが質問していることを言い換える必要があります.

于 2012-04-03T05:49:39.873 に答える