在我的專案中,我使用 Dynaic LINQ ( https://dynamic-linq.net/ ) 從資料庫中選擇資料。這是我當前的選擇代碼:
List<dynamic> clientData = await clientDataset
.Select($"new({string.Join(",", requiredColumns)})")
.ToDynamicListAsync();
我需要擴展這個。在客戶端的后續步驟中,我必須向 clientData 物件添加其他屬性。據我所知,這是不可能開箱即用的。以下方法不起作用:
foreach (dynamic listEntry in clientData)
{
listEntry["MyAdditionalProp1"] = GetStringValue1();
listEntry["MyAdditionalProp2"] = GetStringValue2();
}
所以我有了在 select 陳述句中添加這些作為假列的想法,這也不起作用。
List<dynamic> clientData = await clientDataset
.Select($"new({string.Join(",", requiredColumns)},'' AS MyAdditionalProp1, '' AS MyAdditionalProp2)")
.ToDynamicListAsync();
附加屬性的名稱(MyAdditionalProp1、MyAdditionalProp1、...)在選擇之前是已知的,但它們是動態的,因此我無法對其進行硬編碼。
如何將動態屬性添加到我的串列并像在 foreach 回圈中那樣修改它們的值?
uj5u.com熱心網友回復:
假設 Dynamic LINQ 回傳ExpandoObject,您可以執行以下操作:
foreach (IDictionary<string, object> listEntry in clientData)
{
listEntry["MyAdditionalProp1"] = GetStringValue1();
listEntry["MyAdditionalProp2"] = GetStringValue2();
}
uj5u.com熱心網友回復:
由于動態 LINQ 會在運行時基于stringnew 運算式創建匿名型別,因此您無法在創建后向物件添加屬性。
因此,您確實需要將屬性添加到新運算式中:
List<dynamic> clientData = await clientDataset
.Select($"new({string.Join(",", requiredColumns)},\"\" AS MyAdditionalProp1, \"\" AS MyAdditionalProp2)")
.ToDynamicListAsync();
然后,由于您在運行時不知道屬性名稱,您必須使用庫提供的輔助函式:
foreach (dynamic listEntry in clientData) {
listEntry.SetDynamicPropertyValue("MyAdditionalProp1", GetStringValue1());
listEntry.SetDynamicPropertyValue("MyAdditionalProp2", GetStringValue2());
}
您可以使用GetDynamicPropertyValue().
注意:大量使用dynamic可能會導致性能問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/318193.html
上一篇:Linq串列選擇上的不同結果
