![](/img/trans.png)
[英]How do I use the AsQueryable method asynchronously with MongoDb C# Driver 2.1?
[英]How do I get data from inner array in MongoDB using LINQ's AsQueryable()?
我無法從 MongoDB 的內部數組中獲取數據。 我得到錯誤:
BsonSerializationException: No matching creator found.
這是我在 MongoDB、查詢和環境中的數據示例。
{
"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
}
POCO
[BsonIgnoreExtraElements]
class CompanyClass
{
#region [ Properties ]
[BsonElement("issuerId")]
public Int32 IssuerId { get; set; }
[BsonElement("compName")]
public string CompName { get; set; }
[BsonElement("symbol")]
public string Symbol { get; set; }
[BsonElement("analyst")]
public IEnumerable<AnalystClass> Analyst { get; set; }
[BsonElement("associates")]
public IEnumerable<AnalystClass> Associates { get; set; }
[BsonElement("gics")]
public string Gics { get; set; }
[BsonElement("cusip")]
public string Cusip { get; set; }
#endregion
}
[BsonIgnoreExtraElements]
class AnalystClass
{
#region [ Properties ]
[BsonElement("init")]
public string ResAnInit { get; set; }
[BsonElement("firstName")]
public string ResAnFirstName { get; set; }
[BsonElement("lastName")]
public string ResAnLastName { get; set; }
[BsonElement("email")]
public string ResAnEmail { get; set; }
#endregion
}
詢問:
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
看來我錯過了一些明顯的東西。 我究竟做錯了什么?
只需像這樣進行投影:
var comps = await compCollection
.AsQueryable()
.Select(c => new
{
...
ResAnsFName = c.Analyst.first().ResAnFirstName
...
})
.ToListAsync();
ResAns 屬性在 CompanyClass class 中不存在,因此您不能使用該屬性。 BsonElements 也與您的 MongoDB 數據不匹配。 Select 應該足以執行 Linq,不需要 FirstorDefault 或 ToList()。
ResAnsFName = c.Analyst.Select(x => x.ResAnFirstName)
更新
布森:
{
"_id" : ObjectId("59ce6b34f48f171624840b05"),
"name" : "Nikola",
"blog" : "rubikscode.net",
"age" : 30,
"location" : "Beograd"
}
C# 強類型 object:
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; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.