是否可以在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 })
});
答案 0 :(得分: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);