亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何處理動態表名

如何處理動態表名

C#
斯蒂芬大帝 2022-12-24 13:46:19
我有許多表需要使用 Linq 組合成一個結構我需要處理許多具有相同結構但表名不同的表(跨越 20 年的財務數據)。我可以創建代碼來動態訪問各種表內容:string tableName = "Trading.DataSources.Prices2017"; var results = DbContext.Set(Type.GetType(tableName));但是,當我嘗試使用 Cast 將一個表中的結果轉換為公用表(具有相同表結構的價格)時:var newResults = results.AsQueryable().Cast<Price>().ToList();我收到以下錯誤:“System.NotSupportedException:‘無法將類型‘Trading.DataSources.Prices2017’轉換為類型‘Trading.DataSources.Price’。LINQ to Entities 僅支持轉換 EDM 原語或枚舉類型?!蔽绎@然可以用我自己的轉換方法進行這種轉換。然而,這會導致同一代碼塊的多個版本以滿足不同的表,并且每年,當我有一組新的價格數據時,我必須修改我的代碼以適應新的一年的表名。有沒有辦法動態地(或一般地)處理這個問題?
查看完整描述

1 回答

?
神不在的星期二

TA貢獻1963條經驗 獲得超6個贊

制作一個新的模型類SharedPrices。此類將包含這些表具有的所有相同值


var newResults = results.select(r => new SharedPrices{value1 = r.value1, value2 = r.value2}).ToList();

對于我的例子,所有價格表只有:


價值1

值2

這些應該代替您的實際類結構。


我為你做了更多的挖掘,我想感謝@Tyler-Long在這里的回答。他的回答基本上指出,只要它們具有完全相同的屬性,您就可以使用 JSON(反)序列化將一個類反映到另一個類中,而無需編寫強制轉換,如下所示:


using Newtonsoft.Json;


string tableName = "Trading.DataSources.Prices2017";

var tableType = Type.GetType(tableName);

var results = DbContext.Set(tableType);

Price newResults = JsonConvert.DeserializeObject<tableType>(JsonConvert.SerializeObject(results.ToList()));

我認為這將為您提供將表格轉換為單一價格模型的能力,而無需顯式編寫轉換邏輯。唯一的缺點是它為您的項目添加了對 Newtonsoft.json 包的依賴(可以通過 nuget 下拉)。雖然我以前親自使用過這個包,但它是可靠的。


查看完整回答
反對 回復 2022-12-24
  • 1 回答
  • 0 關注
  • 105 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號