0
我正在研究地圖應用程序,需要能夠將位置值的巨大數據集削減爲更合理的值。所以我想要做的是什麼組的位置由四捨五入值,如下面的SQL:實體框架/ LINQ回合和計數緯度/經度
select ROUND(Latitude, 0), ROUND(Longitude, 0), count(*) from tweet
group by ROUND(Latitude, 0), ROUND(Longitude, 0)
order by count(*) desc
我永遠無法分組工作,我需要它雖與EF和/或LINQ(主要是因爲該方法我似乎無法理解它是如何工作的)。理想情況下,我希望在EF查詢中擁有它,以便它成爲SQL語句的一部分,並且在執行一些LINQ操作之前,我不必將巨型數據集放入List中;但是如果它必須做到這一點,那麼就這樣吧。
我能做到這樣,但我不想:
var items = context.ExecuteStoreQuery<DataPoint>("select ROUND(Latitude, 0) as lat, ROUND(Longitude, 0)as lon, count(*) as weight from location " +
"group by ROUND(Latitude, 0), ROUND(Longitude, 0) " +
"order by count(*) desc", null).ToList();
編輯: 最終的解決方案(有位來回)低於可接受的最終看上去像這樣:
private class DataPoint
{
public double lat { get; set; }
public double lon { get; set; }
public int weight { get; set; }
}
var mydata = (from t in locations
group t by new {
Latitude = EntityFunctions.Truncate(t.Latitude, accuracy).Value,
Longitude = EntityFunctions.Truncate(t.Longitude, accuracy).Value }
into g
orderby g.Count()
select new DataPoint{ lat = g.Key.Latitude, lon = g.Key.Longitude, weight = g.Count() }).ToList();
不要忘了添加此using語句:
using System.Data.Objects;
這很接近,但沒有考慮舍入,這是我的主要目標。類似這樣的東西會很接近,但會產生一個運行時錯誤:'group t by new {Latitude = Convert.ToDouble(t.Latitude.ToString(「##。#」)),Longitude = Convert.ToDouble(t.Longitude。 ToString(「##。#」))} into g' – FirstDivision
特別是這個錯誤'LINQ to Entities does not recognized the method'Double ToDouble(System.String)'method,this method can not be translated into a store expression.' – FirstDivision
@FirstDivision:使用http://msdn.microsoft.com/en-us/library/dd412702 – SLaks