最近我問了一個關於通過外鍵獲取模型屬性的更一般的問題。 現在我進一步移動了一點,但仍然不知道如何變換對象。將IEnumerable <T>轉換爲動態生成對象的集合
我有什麼是IEnumerable
集合,我通過儲備庫中獲得
regionRaw = unitOfWork.RegionRepository.Get(
keyOrder: q => q.OrderBy(d => d.RegionID),
filter: p => p.FullName.Contains(lastname) || p.ShortName.Contains(lastname),
orderBy: jtSorting,
includeProperties: "District, ISO31662, GOST767Region");
而且我將數據從這個集合導出到Excel中。所以我需要一個select語句來獲取我需要的所有字段。
dt = regionRaw
.Select(x => new
{
ISO = x.ISO31662.GOSTName,
DistrictName = x.District.ShortName
})
我不想枚舉我需要的所有字段在頂部。
我能夠做出一個方法,以識別哪些字段具有簡單的值,哪些具有通過外鍵引用的對象。然後該方法將返回一個屬性列表。
現在我需要一些方法來寫內部select
內。我看到這樣的事情:
dt = regionRaw
.Select(x => new
{
foreach (prop in propList)
{
prop.PropertyName = x.GetType()
.GetProperty(prop.TableName)
.GetValue(x, null).GetType()
.GetProperty(prop.PropertyName)
.GetValue(
x.GetType().GetProperty(prop.TableName).GetValue(x, null),
null);
}
}
其中propList
是我以前得到的屬性的集合。
我完全意識到上層代碼更多的是僞代碼,但我不知道如何在.NET中實現這一點。
因此,如果您可以爲此任務提出一些解決方案,我將非常感激。或者,也許你可以解釋,這一切都是一個壞主意,不應該被實現。
很多時候我遇到過這個問題。最終,我發現手動分配屬性更容易,而不是回到使用Reflection或Automapper等映射實用程序。 – Oliver
我不太明白,但是,我懷疑使用反射動態地在已知類型上執行此操作可能是不好的。明確並在編譯時得到你的錯誤。 – Jodrell