2012-10-11 103 views
2

我有一個名爲industries的表。在此我字段linq查詢更新多條記錄

  • workfor_id
  • workfor_usr_id
  • workfor_industry_id

使用相同的值workfor_id,我有不同的workfor_industry_id's。

foreach (var k in us){ 
    var ind = dbContext.industries.Where(i => i.workfor_id == 
     k.id).Select(i => i).FirstOrDefault(); 
    string ind2 = k.industry; 
    var industryParts = ind2.Split(','); 
    var o = (industryParts.Length); 
    for (c = 0; c < o; c++){ 
    ind.workfor_id = Convert.ToInt16(k.id); 
    ind.workfor_industry_id = Convert.ToInt16(k.industryid); } 
    } 

要更新workfor_industry_id領域我已經實現了foreach循環中內環到達workfor_industry_id's.here同一記錄的值是過載與不同workfor_industry_id的。

你能告訴我如何實現這個。

+2

(1)從上下文中的數據加載到一個列表'';(2 )迭代該列表中的元素並進行更新,(3)將其保存回數據庫..... –

+0

在迭代中,我必須迭代一個循環以獲取workfor_industry_id.so,同一記錄會重載。 – steve

+2

你對你想要做的事情不是很清楚。你可以請**更新**你的問題,並以代碼顯示我們(即使它是僞代碼)你想做什麼以及你卡在哪裏/不確定如何繼續? –

回答

0

修訂 此更新增加了一些錯誤檢查和假定-1是從不爲industry_id

有效值
short GetShort(string value) { 
    short returnValue; 
    value = (value ?? string.Empty).Replace("\"",null); 
    return short.TryParse(value, out returnValue) ? returnValue : (short)-1; 
} 

foreach (var k in us){ 
    var id=Convert.ToInt16(k.id); 
    var toRemove=from i in dbContext.industries 
       where i.workfor_id == k.id 
       select i; 
    var toAdd = from x in (k.industry ?? string.Empty).Split(',') 
       select new Industry { 
         workfor_id=id, 
         workfor_industry_id=GetShort(x) 
        }; 

    dbContext.industries.DeleteAllOnSubmit(toRemove); 
    dbContext.industries.InsertAllOnSubmit(toAdd.Where(x=>x.workfor_industry_id != -1)); 

} 
dbContext.SubmitChanges(); 
+0

類似於此,在toRemove我得到確切記錄,但在toAdd我沒有得到任何記錄,它是說輸入字符串格式不正確。在k.industry我得到值爲「4,1」格式。 – steve

+0

@steve你得到的錯誤將表明解析時的x不是一個有效的整數。如果每個條目不是有效整數,你想要的行爲是什麼? –

+0

實際上workfor_industry_id是short.and我做了一些小改動,在k.industry.Split(',')我變得像「4,1」格式 – steve