[英]C# accessing property values by property name
之前問過一個問題,但我的措辭不夠好。 我需要訪問 Mongo 數據庫構建器投影實例化中的屬性名稱。
與編碼出我想通過用戶選擇訪問該屬性的每一種可能性相比。 像這樣
UserSubmittedModel s = new UserSubmittedModel
{
SensorDataChannelName = "AirTemp"
};
var projection = Builders<SensorData>.Projection.Include(u => u.GetType().GetProperty(s.SensorDataChannelName).GetValue(u, null)).Include(u => u.MainFileId).Include(u => u.UnixTime).Exclude(u => u.Id);
但是,我在執行此操作時反復遇到此錯誤
System.InvalidOperationException: 'Unable to determine the serialization information for u => u.GetType().GetProperty(value(Program+<>c__DisplayClass0_1).s.SensorDataChannelName).GetValue(u, null).'
我還深入研究了另一篇涉及此內容的帖子,他們從方法中返回,本質上是同一件事。 但我得到了相同的結果。
static object GetPropValue(object target, string? propName)
{
return target.GetType().GetProperty(propName).GetValue(target, null);
}
我想將用戶選擇轉換為 model 參數名稱,以便我可以投影並包含它。
根據上一個問題,我認為您正在嘗試根據所選值 ( s.SensorDataChannelName
) 從SensorData
獲取屬性名稱。
從MongoDB .NET 驅動程序文檔(投影定義生成器部分) ,您可以將字段名稱作為string
傳遞,這是 lambda 表達式的替代方法。
var projection = Builders<Widget>.Projection.Include("X")
.Include("Y")
.Exclude("Id");
用這條線:
u.GetType().GetProperty(s.SensorDataChannelName).GetValue(u, null)
它返回u./* value of s.SensorDataChannelName */
但不返回u
中的屬性(名稱)。
您可以直接傳遞字段名稱,如下所示:
var projection = Builders<SensorData>.Projection
.Include(s.SensorDataChannelName)
// Following fields to be included / excluded
;
或者,如果您想先驗證屬性名稱:
string fieldName = typeof(SensorData).GetProperty(s.SensorDataChannelName)?.Name;
if (String.IsNullOrEmpty(fieldName))
{
// TO-DO Handle Invalid field name
return;
}
var projection = Builders<SensorData>.Projection
.Include(fieldName)
.Include(u => u.MainFileId)
.Include(u => u.UnixTime)
.Exclude(u => u.Id);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.