1

クエリSELECTでテンプレートを作成することはできますか? LINQ現在6、まったく同じ SELECT を使用するメソッドがあります。可能であればテンプレートを使用したいと思います。

これは私が使用しているコードです。select を変更したい場合、コード内の非常に多くの場所で同じことを変更する必要があります。

result = query.Select(b => new
{
    route_id = b.b.route_id,
    name = b.b.name,
    description = b.b.description,
    distance = b.b.distance,
    distance_to_route = (int)b.distance_to_from_me,
    departure_place = b.b.departure_place,
    arrival_place = b.b.arrival_place,
    owner = b.b.user.username,
    average_rating = b.avg_rating,
    is_favorite = b.is_favorite,
    date = b.b.date,
    attributes = b.b.route_attributes.Select(c => 
        c.route_attribute_types.attribute_name),
    coordinates = b.b.coordinates.Select(c => 
        new coordinateToSend { sequence = c.sequence, 
            lat = c.position.Latitude, 
            lon = c.position.Longitude })
});
4

1 に答える 1

1

これを行う 1 つの方法の簡単な例を次に示します。

あなたの例では、ソース型を匿名型に変換しています。変換された/結果のタイプを表すクラスを作成できます。次に例を示します。

    public class ResultClass
    {
        public string ResultPropA { get; set; }
    }

例として、以下がソース クラスの定義であるとしましょう。

    public class SourceClass
    {
        public string SourcePropA { get; set; }
    }

ソース オブジェクトと結果オブジェクトの型定義ができたので、ソース クラスのコレクションを結果クラスのコレクションに変換する拡張メソッドを作成できます。

    public static class SourceToResultRepository
    {
        public static IEnumerable<ResultClass> ConvertSourceToResult
            (this IEnumerable<SourceClass> source)
        {
            return source.Select(s => new ResultClass
            {
                ResultPropA = s.SourcePropA
                //Add all other property transformations here
            });
        }
    }

以下は、変換を実行する必要がある場所で使用する方法の例です。

 //Extension usage:
 var result = Database.Source.ConvertSourceToResult();

 //Direct usage:
 var result = SourceToResultRepository.ConvertSourceToResult(Database.Source);
于 2013-03-15T12:48:22.907 に答える