簡體   English   中英

動態分配值給LINQ中的列

[英]Dynamically assigning a value to a column in LINQ

我有以下情況:

這是我的模型:

TableA{
   public int Id {get; set;}
   public string Column1 {get; set;}
   public string Column2 {get; set;}
   public string Column3 {get; set;}
   ...
   public string ColumnN {get; set;}
}

TableB{
   public int Id {get; set;}
   public string Column1 {get; set;}
   public string Column2 {get; set;}
   public string Column3 {get; set;}
   ...
   public string ColumnN {get; set;}
}

現在,假設我想將一些值從TableA復制(傳輸)到TableB。 為此,我在數據庫中創建了一個表,其中具有TableA中與TableB相關聯的列的所有關系。

我使用以下代碼來獲取需要復制的列:

var listColumnsToCopy = db.TableRelationsAB.Where(tf => tf.Copy == 1);

這樣,我就有了要復制的所有列的列表。

在這一點上,我試圖使用C#中的foreach語句來遍歷列表中的列,並且只能為這些列分配值

 Foreach(var col in listColumnsToCopy){
   TableA.col????? = "some value";   ---> HERE
 }

上面的代碼替換了逐列手動執行的操作:

TableA.Column1 = "some value"
TableA.Column2 = "some value"
...
TableA.ColumnN = "some value"

那可能嗎? 在這種情況下反射會起作用嗎?

簡要答案:是

詳細的答案:是的,用戶可以使用反射來存檔此類行為,只需使用其名稱作為匹配條件來獲取對應表類型的PropertyInfo對象,然后設置所需的值即可。 但這會很慢。 最快的方法是編寫SQL存儲過程,或者至少使用動態編譯。

是的,這可以通過這樣的方式來完成

var listColumnsToCopy = db.TableRelationsAB.Where(tf => tf.Copy == 1)
                        .Select(a=> new{ColumnA = a.Column1
                                      ,ColumnB=a.Column2??"some value"});

這將用您的值替換Column2中的空值;

或者,如果您的Column2具有空字符串而不是null,則可以使用

 var listColumnsToCopy = db.TableRelationsAB.Where(tf => tf.Copy == 1)
                        .Select(a=> new{ColumnA = a.Column1
                                      ,ColumnB=a.Column2=""?"some value":a.Column2});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM