[英]Linq query to select distinct record and count number of distinct record
我有tblVisitor
表,該表存儲訪問者的位置詳細信息。 它具有以下結構。
vRegion NVARCHAR (100) NULL,
vTimeZone NVARCHAR (100) NULL,
vLat NVARCHAR (MAX) NULL, //Latitude
vLong NVARCHAR (MAX) NULL, //Longitude
現在,此存儲取決於每個session
並且當session
到期時,可能會再次存儲相同的位置詳細信息。 現在,我試圖在地圖中顯示它,從而在模型類中獲取緯度和經度詳細信息。 我的模型課如下:
public class VisitorMapViewModel
{
public int count { get; set;}
public GeoCoordinate coords { get; set; }
}
我正在嘗試按以下方式填充模型,但是沒有運氣。
List<VisitorMapViewModel> model = new List<VisitorMapViewModel>();
var data = _db.tblVisitors.Distinct().ToList().Select(v => new VisitorMapViewModel()
{
coords = new System.Device.Location.GeoCoordinate(Convert.ToDouble(v.vLat), Convert.ToDouble(v.vLong)),
count = _db.tblVisitors.GroupBy(m => new { m.vLat,m.vLong}).Select(m=>m).Distinct().Count()
}).ToList();
這里有2個問題。.將nvarchar
類型的Latitude
和Longitude
值轉換為double
nvarchar
,然后獲取不同的緯度和經度值並計算發生的次數。.當我互換轉換為ToList()
在Distinct()
ToList()
之前,反之亦然。.我感覺差不多了,但是不確定丟失了什么。 任何人都可以幫忙。
您應該執行一個查詢,將其按緯度和經度分組並獲取計數。 然后將結果轉換為模型。 想要從SQL查詢切換到內存Linq查詢時,可以使用AsEnumerable
,而無需創建列表的開銷。
var data = (from visitor in _db.tblVisitors
group visitor by new { visitor.vLat, visitor.vLong } into grp
select new
{
grp.Key.vLat,
grp.Key.vLong,
Count = grp.Count()
})
.AsEnumerable()
.Select(x => new new VisitorMapViewModel()
{
coords = new System.Device.Location.GeoCoordinate(
double.Parse(x.vLat),
double.Parse(x.vLong)),
count = x.Count
})
.ToList();
或者,您可以使用方法語法來完成所有這些操作
var data = _db.tblVisitors
.GroupBy(v => new { v.vLat, v.vLong })
.Select(grp => new
{
grp.Key.vLat,
grp.Key.vLong,
Count = grp.Count()
})
.AsEnumerable()
.Select(x => new new VisitorMapViewModel()
{
coords = new System.Device.Location.GeoCoordinate(
double.Parse(x.vLat),
double.Parse(x.vLong)),
count = x.Count
})
.ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.