1

是否可以SELECTLINQ查询中制作模板?现在我有6使用完全相同 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

这是您可以执行此操作的一种方法的简单示例:

在您的示例中,您将源类型转换为匿名类型。您可以创建一个类来表示您的转换/结果类型,例如:

    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 回答