2014-10-11 37 views
0

看着这样的:内联SQL功能,而不新型

var t = ctx.Layer 
    .Where(c => c.Geometry.Intersects(boundingBox)) 
    .Select(s => new 
    { 
     Geometry = SqlSpatialFunctions.Reduce(s.Geometry, degreesPerPixel), 
     s.column1, 
     s.column2, 
     s.column3, 
     s.column4, 
     s.column5, 
     s.column6, 
     s.column7, 
     s.column8, 
     s.column9, 
    }).ToArray(); 

其相当是烦人的是一个人必须要重新编写所有列刚上运行的列的功能。有没有更好的方法来做到这一点?在没有写所有属性方面

回答

1

“更好”:

var t = ctx.Layer 
.Where(c => c.Geometry.Intersects(boundingBox)) 
.Select(s => new 
{ 
    Geometry = SqlSpatialFunctions.Reduce(s.Geometry, degreesPerPixel), 
    Layer = s 
}).ToArray(); 
0

继承人我做了什么。非常类似于Eren的回答。

public static class VectorLayerHelperExtensions 
{ 
    public static IEnumerable<OgrEntity> Reduce(this IQueryable<OgrEntity> query, double threshold) 
    { 
     return query.Select(s => new 
        { 
         g = SqlSpatialFunctions.Reduce(s.Geometry, threshold), 
         s 
        }).AsEnumerable().Select(t => { t.s.Geometry = t.g; return t.s; }); 
    } 
}