我有这张桌子(Detec):
door string;
userName string;
dt double; // seconds since 01/01/1970 00:00:00
...
我需要group by:door userName,并获得:MIN(dt)MAX(dt)
我有这个linq查询:
var dataQuery =
(from d in Detecc
where d.dt >= fBegin && d.dt <= fEnd
select new DeteccGet1 { door = d.door, userName = d.userName, dt = d.dt })
.GroupBy(r => new { r.door, r.userName })
.Select(grp => new
{
door = grp.Key.door,
userName = grp.Key.userName,
Min = grp.Min(t => t.dt),
Max = grp.Max(t => t.dt)
});
public class DeteccGet1
{
public string door { get; set; }
public string userName { get; set; }
public double dt { get; set; }
}
问题不在于数据返回。 但我有数据:
var dataQuery = (from d in Detecc
where d.dt >= fBegin && d.dt <= fEnd
select new DeteccGet { door = d.door, userName = d.userName, dt = d.dt });
你能告诉我这是什么问题吗?
更新 问题出在GetCollection中:
var deteccs = basedatos.GetCollection<Detecc>("Detecc").AsQueryable(); // error!!!!!
代码完成:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MongoDB.Bson;
using MongoDB.Driver;
using MongoDB.Driver.Linq;
namespace trialMongoDB
{
class Program
{
static void Main(string[] args)
{
MongoServer server = new MongoClient("Server=localhost:27017").GetServer();
MongoDatabase basedatos = server.GetDatabase("Trial");
//var deteccs = basedatos.GetCollection<Detecc>("Detecc").AsQueryable(); // error !!!!!!!
//var deteccs = basedatos.GetCollection<Detecc>("Detecc").FindAll().AsEnumerable(); // ok
var deteccs = basedatos.GetCollection<Detecc>("Detecc").FindAll().AsQueryable(); // ok
var queryDat = from d in deteccs
group d by new { d.door, d.user } into grp
select new
{
door = grp.Key.door,
user = grp.Key.user,
min = grp.Min(x => x.dt),
max = grp.Max(x => x.dt)
};
foreach (var c in queryDat) Console.WriteLine("{0} {1}, MIN={2} MAX={3}", c.door, c.user, c.min, c.max);
var queryDat2 = from d in deteccs select d;
foreach (var c in queryDat2) Console.WriteLine("{0} {1} {2} {3}", c.door, c.user, c.dt, c.pin);
Console.ReadLine();
}
}
public class Detecc
{
public ObjectId _id { get; set; }
public string door { get; set; }
public string user { get; set; }
public double dt { get; set; }
public string pin { get; set; }
}
}
更新2: Group by未在MongoDB c#驱动程序中实现,因此我们必须在客户端中使用Group by。查找可以限制注册。
非常感谢你。 抱歉我的英文。