我想知道我是否甚至可以在未映射且完全动态的mongo文档上使用LINQ。原因是我有ITEM aggrigator,它包含未知的键和值。这只是我之所以选择no-sql解决方案的唯一原因,因为EAV + SQL看起来很慢并且过度。
我在我的test
集合中插入了超过1m的文档,其中one
到ten
字段中包含随机数据。现在,我正在尝试将其取回并使用本机Mongo查询,当然。使用LINQ并不是那么多。我在这里做错了吗?
错误
mscorlib.dll中发生未处理的“System.FormatException”类型异常
其他信息:输入字符串的格式不正确。
代码
private static List<BsonDocument> Get(string query)
{
var client = new MongoClient("mongodb://localhost");
var server = client.GetServer();
var db = server.GetDatabase("test");
var collection = db.GetCollection("items");
var collectionQuery = collection.AsQueryable();
var result = collection.Find(Query.EQ("Six", 7962)).ToList(); // THIS WORKS
//var result = collection.AsQueryable().Where(x => x["Six"] == 7962).ToList(); // ERROR
return result;
}
答案 0 :(得分:3)
驱动程序目前不支持动态类型。这是它的jira票: https://jira.mongodb.org/browse/CSHARP-539
还有一篇关于一些可能的解决方法的有趣帖子: http://roysvork.wordpress.com/2013/04/22/using-linq-to-query-loosely-typed-data-in-mongodb/
答案 1 :(得分:0)
看起来版本1.10.0的驱动程序支持LINQ查询中的动态文档。也就是说,我已经能够执行这样的查询:
var collection = database.GetCollection("items");
var query =
from e in collection.AsQueryable()
where e["string_property"] == "a_value"
select e;
foreach (var c in query)
{
Console.WriteLine(c["another_property"]);
}
官方文档C# Driver LINQ Tutorial似乎只包含使用域对象的示例,并且基于1.8版。
以上代码适用于1.10.0。我无法确定何时向驱动程序添加了对上述代码的确切支持。