我正在尝试使用IQueryable对象从Bson文档中获取特定值。我有一个读取json结构的方法,如下所示。
"SimulatedData": [
{
"value": 1819.00923045901,
"units": "hp",
"tag": "comp/totalIhp",
"name": "Compressor - Total IHP"
},
{
"value": 789.294125,
"units": "RPM",
"tag": "comp/averageSpeed",
"name": "Compressor - Speed"
},
{
"value": 2064.74658240481,
"units": "hp",
"tag": "comp/totalBhp",
"name": "Compressor - Total BHP"
}
]
我正在读取此JSON,获取“标签”键值,然后在MongoDB的集合中寻找此标签值。
try
{
string jsonFromFile;
using (var reader = new StreamReader(path))
{
jsonFromFile = reader.ReadToEnd();
}
var simulatedData = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(jsonFromFile);
foreach (var channel in simulatedData.SimulatedData)
{
var tag = channel.tag;
var master = DBConnect.CosmosClient.GetCollection<MasterVariables>("MasterVariables");
var channelId = master.AsQueryable().Where(x => x.Tag == $"{tag}");
foreach(var c in channelId)
{
string id = c.ChannelID;
Console.WriteLine(id);
}
}
}
“标记”键的值将用于在MasterVariables中搜索匹配项。 MasterVariables中与“ tag”键的值匹配的文档将生成JSON / bson,如下所示。我有一个使用这些值并将其设置为类属性的类
{
"Tag" : "comp/idealTotalSucCapacity",
"Group" : "{ id : \"comp\", parent : \"#\", text : \"Compressor\" }",
"Series" : "Compressor",
"Enabled" : true,
"ChannelID" : "C8",
"productType" : "Spotlight_Comp",
"database" : "compdata"
}
MasterVariables类(如下)
public class MasterVariables
{
public string Tag { get; set; }
public string Group { get; set; }
public string Series { get; set; }
public bool Enabled { get; set; }
public string ChannelID { get; set; }
public string productType { get; set; }
public string database { get; set; }
}
我的主要问题是我无法使用c.ChannelID
获得“ ChannelID”值。我的代码可以编译,不会给我任何错误。但是我对于为什么不能使用Iqueryable对象获取channelID值感到非常困惑。我知道下面的foreach
是不正确的,因为我将只收到1个与'tag'值匹配的Bson文档。但是我没有发现任何有关获取ChannelId的方法的有用信息。对我在这里做错的任何想法吗?还是有其他方法?
foreach(var c in channelId)
{
string id = c.ChannelID;
Console.WriteLine(id);
}