C# 如何使用LINQ'从MongoDB中的内部数组获取数据;s AsQueryable()?
我无法从MongoDB中的内部数组获取数据。我得到一个错误:C# 如何使用LINQ'从MongoDB中的内部数组获取数据;s AsQueryable()?,c#,mongodb,linq,asqueryable,C#,Mongodb,Linq,Asqueryable,我无法从MongoDB中的内部数组获取数据。我得到一个错误: BsonSerializationException: No matching creator found. 下面是我在MongoDB、query和environment中的数据示例 { "Id" : 1, "compName" : "Samsung Electronics Co.", "symbol" :
BsonSerializationException: No matching creator found.
下面是我在MongoDB、query和environment中的数据示例
{
"Id" : 1,
"compName" : "Samsung Electronics Co.",
"symbol" : "005930-KRX",
"analyst" : [
{
"analystId" : 4,
"analystInit" : "SJ",
"analystFName" : "Steve",
"analystLName" : "Jobs",
"analystEmail" : "steve.jobs@apple.com"
}
],
"associates" : [
{
"analystId" : 7,
"analystInit" : "BG",
"analystFName" : "Bill",
"analystLName" : "Gates",
"analystEmail" : "bill.gates@microsoft.com"
},
{
"analystId" : 10,
"analystInit" : "MJ",
"analystFName" : "Michael",
"analystLName" : "Jordan",
"analystEmail" : "michael.jordan@nba.com"
}
],
"gics" : "75301020",
"cusip" : null
}
波科
看来我遗漏了一些明显的东西。我做错了什么?只需这样做投影:
var comps=等待compCollection
.AsQueryable()
.选择(c=>new
{
...
ResAnsFName=c.Analyst.first().resansfirstname
...
})
.ToListAsync();
在CompanyClass类中不存在ResAns属性,因此无法使用该属性。
此外,BsonElements与您的MongoDB数据不匹配。
Select应足以执行Linq,而不需要FirstorDefault或ToList()
更新
BSON:
C#强类型对象:
public class User
{
[BsonId]
public ObjectId Id { get; set; }
[BsonElement("name")]
public string Name { get; set; }
[BsonElement("blog")]
public string Blog { get; set; }
[BsonElement("age")]
public int Age { get; set; }
[BsonElement("location")]
public string Location { get; set; }
}
我很抱歉。那是行不通的。当我做那个投影时,我仍然会得到同样的错误(@inquisitive\u one如果你把它放到一个控制台应用程序中,你会发现它工作得非常好。对不起,你是对的。我已经更新了我发布给show Analyst的帖子,而不是在CompanyClass类中重新发布。我尝试了你的建议,但仍然得到相同的错误:你有没有尝试修复bsonement名称?在哪个类中?CompanyClass还是AnalystClass?你有什么建议吗?这两个类:[BsonElement(“issuerId”)]=[BsonElement(“Id”)][BsonElement(“firstName”)]=[BsonElement(“analystFName”)]……我恐怕有点糊涂了。我不明白更改BsonElement名称会有什么帮助。
compCollection = GetMonDB("Companies").GetCollection<CompanyClass>("coverage");
var comps = compCollection.AsQueryable()
.Select(c => new {
CompName = c.CompName,
Symbol = c.Symbol,
ResAnsFName = c.Analyst.Select(x => x.ResAnFirstName) <-- Problem line
CUSIP = c.Cusip
});
C# MongoDB.Driver = 2.12
MongoDB = 4.2
Windows = Win10
ResAnsFName = c.Analyst.Select(x => x.ResAnFirstName)
{
"_id" : ObjectId("59ce6b34f48f171624840b05"),
"name" : "Nikola",
"blog" : "rubikscode.net",
"age" : 30,
"location" : "Beograd"
}
public class User
{
[BsonId]
public ObjectId Id { get; set; }
[BsonElement("name")]
public string Name { get; set; }
[BsonElement("blog")]
public string Blog { get; set; }
[BsonElement("age")]
public int Age { get; set; }
[BsonElement("location")]
public string Location { get; set; }
}