[英]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.