Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法转换BsonDocument_C#_Mongodb_Mongodb Query_Bson - Fatal编程技术网

C# 无法转换BsonDocument

C# 无法转换BsonDocument,c#,mongodb,mongodb-query,bson,C#,Mongodb,Mongodb Query,Bson,我正在构建一个游戏,并使用MongoDB存储玩家坐标。我使用的是旧版本的MongoDB,我的代码运行良好,但我必须在MongoDB云上托管数据库,我被迫将.NET版本更改为4.X。我下载了新的驱动程序,我在修复代码时遇到了一些问题,因为我使用的版本太旧了,而且一切都变了 这是我的密码: public class Coordinate { public float x { get; set; } public float y { get; set; } public f

我正在构建一个游戏,并使用MongoDB存储玩家坐标。我使用的是旧版本的MongoDB,我的代码运行良好,但我必须在MongoDB云上托管数据库,我被迫将.NET版本更改为4.X。我下载了新的驱动程序,我在修复代码时遇到了一些问题,因为我使用的版本太旧了,而且一切都变了

这是我的密码:

public class Coordinate {
    public float x  { get; set; }
    public float y  { get; set; }
    public float z  { get; set; }
}

public class Scores  {
    [MongoDB.Bson.Serialization.Attributes.BsonElement]
    public ObjectId _id { get; set; }
    public Coordinate[] Coordinates { get; set; }
    public string Player { get; set; }
    public float Time { get; set; }
    public string Level { get; set; }
}

public static BsonArray arr = new  BsonArray();
public static BsonArray arr2 = new BsonArray();

public static IMongoCollection<Scores>  highestScoreCollection = 
db.GetCollection<Scores>("scores");
我收到了这个错误:

参数1:无法从“MongoDB.Bson.BsonDocument”转换为 'System.Collections.Generic.IEnumerable'

我无法迭代我的收藏:

foreach (var document in highestScoreCollection.Find(new QueryDocument("Level", scene.name)).SetSortOrder(SortBy.Descending("Time"))){

}
我收到以下错误:

参数1:无法从“MongoDB.Bson.BsonArray”转换为 'System.Collections.Generic.IEnumerable'

错误CS0103:名称“SortBy”在当前上下文中不存在


如何修复代码?

以下代码对您来说是什么样子的?如果它看起来很吸引人,请看一下mongodb驱动程序包装。它大大简化了mongodb访问。除非您真的需要,否则根本不需要使用
b ondocument

使用MongoDB.Entities;
使用制度;
使用System.Linq;
命名空间堆栈溢出
{
公共课程
{
[姓名(“分数”)]
公共类分数:实体
{
公共坐标[]坐标{get;set;}
公共字符串播放器{get;set;}
公共浮点时间{get;set;}
公共字符串级别{get;set;}
}
公共类坐标
{
公共浮点x{get;set;}
公共浮点y{get;set;}
公共浮点z{get;set;}
}
私有静态void Main(字符串[]args)
{
新DB(“测试”);
var coords=new[]{
新坐标{x=1.111f,y=2.222f,z=3.333f},
新坐标{x=1.111f,y=2.222f,z=3.333f},
新坐标{x=1.111f,y=2.222f,z=3.333f}
};
(新[]{
新分数
{
坐标=坐标,
Player=“Player 1”,
时间=0.11f,
Level=“场景a”
},新分数
{
坐标=坐标,
Player=“Player 2”,
时间=0.22f,
Level=“场景a”
}
}).Save();
var分数=DB.Queryable()
。其中(s=>s.Level==“场景a”)
.OrderByDescending(s=>s.Time)
.ToArray();
foreach(分数中的var分数)
{
Console.WriteLine($“player:{score.player}”);
}
Console.ReadKey();
}
}
}

[免责声明:我是库的作者]

以下代码对您来说是什么样子的?如果它看起来很吸引人,请看一下mongodb驱动程序包装。它大大简化了mongodb访问。除非您真的需要,否则根本不需要使用
b ondocument

使用MongoDB.Entities;
使用制度;
使用System.Linq;
命名空间堆栈溢出
{
公共课程
{
[姓名(“分数”)]
公共类分数:实体
{
公共坐标[]坐标{get;set;}
公共字符串播放器{get;set;}
公共浮点时间{get;set;}
公共字符串级别{get;set;}
}
公共类坐标
{
公共浮点x{get;set;}
公共浮点y{get;set;}
公共浮点z{get;set;}
}
私有静态void Main(字符串[]args)
{
新DB(“测试”);
var coords=new[]{
新坐标{x=1.111f,y=2.222f,z=3.333f},
新坐标{x=1.111f,y=2.222f,z=3.333f},
新坐标{x=1.111f,y=2.222f,z=3.333f}
};
(新[]{
新分数
{
坐标=坐标,
Player=“Player 1”,
时间=0.11f,
Level=“场景a”
},新分数
{
坐标=坐标,
Player=“Player 2”,
时间=0.22f,
Level=“场景a”
}
}).Save();
var分数=DB.Queryable()
。其中(s=>s.Level==“场景a”)
.OrderByDescending(s=>s.Time)
.ToArray();
foreach(分数中的var分数)
{
Console.WriteLine($“player:{score.player}”);
}
Console.ReadKey();
}
}
}

[免责声明:我是该库的作者]

您不需要
BsonArray
,您只需要
List
,或任何其他
IEnumerable
实现者。您不需要
BsonArray
,您只需要
List
,或者任何其他
IEnumerable
实现者。对于这样的事情,使用整个包装器是完全无用的。@Skami well mate,重点是向人们展示有其他更简单/优雅的方法来完成事情。我个人的看法是,公务司机工作起来很麻烦,还有其他一些限制。问题不是我如何才能做到更简单或更优雅。这是关于他代码中的一个问题。您没有解决这个问题,而是使用您自己编写的包装器提供了一个完整的解决方案。而不是解释问题是什么。你确定你不只是在这里宣传你的包装(看看你的帖子历史,你是),因为如果你想看看这个解决方案可能会奏效,但我不是在为我的问题寻找一个全新的解决方案,应该更容易找到
foreach (var document in highestScoreCollection.Find(new QueryDocument("Level", scene.name)).SetSortOrder(SortBy.Descending("Time"))){

}