动态添加参数到dapper查询

时间:2015-05-26 10:01:17

标签: c# .net dapper

我试图动态发送一个由查询执行的参数列表。目前我有一个空间查询

SELECT top(0 + 30) ListingView.*, ROW_NUMBER() 
OVER (ORDER BY ListingView.BedroomsTotal ASC) AS RowNum
FROM ListingView 

WHERE ListingView.MLSKey = 'nsmls' AND ListingView.Ficoscore = '760-850' AND       ListingView.LifeStyle = 'couple-no-kids' AND ListingView.LoanType = '30YrFixed'     AND ListingView.StandardStatus IN 
('active', 'pending') AND ListingView.ListPrice >1 AND     ListingView.PropertyType = 'SF' AND     (ListingView.GeoLocation.STIntersects(@GeoLocation0) = 1 OR 
ListingView.GeoLocation.STIntersects(@GeoLocation1) = 1

在此空间查询中,geolocation0和geolocation1是硬编码参数。我可能有多个地理位置,我需要在查询中添加。

我目前的短小论点看起来像这样:

 var args = new
 {
 @LivingAreaMin = predicates.GetLivingAreaSqftMin(),
 @LivingAreaMax = predicates.GetLivingAreaSqftMax(),
 @GeoLocation0 = ((lstLocationPolygon != null && lstLocationPolygon.Count >   0) ? SqlGeometry.STPolyFromText(new SqlChars(new SqlString(
     string.Format("POLYGON(({0}))", lstLocationPolygon[0]))), 0) : null),

 @GeoLocation1 = ((lstLocationPolygon != null && lstLocationPolygon.Count >   1) ? SqlGeometry.STPolyFromText(new SqlChars(new SqlString(
 string.Format("POLYGON(({0}))", lstLocationPolygon[1]))), 0) : null),

 @GeoLocation2 = ((lstLocationPolygon != null && lstLocationPolygon.Count > 2) ? SqlGeometry.STPolyFromText(new SqlChars(new SqlString(
 string.Format("POLYGON(({0}))", lstLocationPolygon[2]))), 0) : null),
}       

在这种情况下,GeoLocation参数可能大于3或小于3,因此我需要动态添加它们。我已使用How to create arguments for a Dapper query dynamically链接进行解决。

当我尝试使用DynamicParameters()时,却给了我以下错误。

  

其他信息:必须仅为UDT参数设置UdtTypeName属性。

我也试过IEnumerable>和词典,但它给我以下错误

  

必须声明标量变量“@xyz”,即使我正确声明了所有变量。

你能指出我正确的方向。

0 个答案:

没有答案