MongoDB c#LINQ生成查询

时间:2012-12-28 15:59:27

标签: c# mongodb

如何从LINQ查询中获取生成的查询? 我尝试了这个,但它没有用:

var query = (
            from d in mcollection.AsQueryable<InstrumentationDocument>()
            where d.user == User && d.timestamp > DateTime.Today.AddDays(-days)
            orderby d.timestamp descending
            select new
            {
                d.timestamp,
                d.machine,
                d.processID,
                feature = d.info["feature"].AsString,
                extra = d.info.Contains("extra") ? d.info["extra"].ToJson() : ""
            }
);

var mongoQuery = ((MongoQueryable<InstrumentationDocument>)query).GetMongoQuery();

var json = mongoQuery.ToJson();

其中InstrumentationDocument

class InstrumentationDocument
{
    [BsonId]
    public ObjectId _id { get; set; }

    [BsonDateTimeOptions(Kind = DateTimeKind.Local)]
    public DateTime timestamp { get; set; }

    public string user { get; set; }
    public string machine { get; set; }
    public int processID { get; set; }
    public BsonDocument info { get; set; }
}

2 个答案:

答案 0 :(得分:1)

您需要从代码中删除.ToArray()。目前,查询不是MongoQueryable实例。它是一个匿名类型的数组。因此,您对MongoQueryable的强制转换不应该正常工作。

答案 1 :(得分:0)

在最新版本的MongoDB(v2.6)中简单得多,只需在LINQ查询上调用.ToJson(),然后将查询字符串打印到控制台。

string queryTextSentToMongoDb = query.ToJson();