2012-11-08 48 views
3

我想我正確地把我的問題:)從LINQ集合中刪除一個項目

我正在查詢數據庫使用LINQ來檢索一些數據。請找到下面的代碼。

var leadtasktype = _context.LeadTypeTaskTypes.Where(l => l.LeadTypeId == item.Value); 

foreach(LeadTypeTaskType l in leadtasktype){ 
    if (l.TaskTypeId == 21) 
    { 
     //I need to remove an item which has the tasktype id 21 
    } 
} 

正如我在評論中提到的,我需要從基於我if條件leadtasktype刪除項目。我該怎麼做呢?

+1

看看這個答案: http://stackoverflow.com/questions/853526/using-linq-to-remove-objects-within-a-listt –

回答

2
var leadtasktype = _context.LeadTypeTaskTypes.Where(l => l.LeadTypeId == item.Value && l.LeadTypeId != 21); 
1
var leadtasktype = _context.LeadTypeTaskTypes.Where(l => l.LeadTypeId == item.Value); 

var newData = leadtasktype; 

       foreach(LeadTypeTaskType l in leadtasktype){ 
        if (l.TaskTypeId == 21) 
        { 
         newData.Remove(l); 
        } 
       } 
+0

您不能在修改集合'foreach'循環。 –

+3

o請原諒我,科羅拉多和華盛頓剛剛通過了大麻合法化......所以我現在感覺有點高...... =} – m4ngl3r

+3

大聲笑! ........ –

5

這似乎非常像另一個過濾條件:

var leadtasktype = _context.LeadTypeTaskTypes 
    .Where(l => l.LeadTypeId == item.Value) 
    .Where(l => l.TaskTypeId != 21); // Exclude ID = 21. 
3

剛剛離開他們出您所設定的:

var leadtasktype = _context.LeadTypeTaskTypes 
    .Where(l => 
     l.leadTypeId != 21 && 
     l.LeadTypeId == item.Value 
    ); 
+0

另外值得指出的是,對於LINQ to Objects而言,這種方法比鏈接'.Where()'方法稍快,因爲將會使用更少的迭代器。另一方面,對於LINQ to SQL,應該生成相同的SQL代碼,所以除了樣式和可讀性之外,我沒有真正的區別(我自己更喜歡鏈接)。 – Alex

1
var leadtasktype = _context.LeadTypeTaskTypes.Where(l => l.LeadTypeId == item.Value); 

for (var i = 0; i < leadtasktype.Count; i++) 
{ 
    if (leadtasktype[i].TaskTypeId == 21) 
    { 
    leadtasktype.RemoveAt(i); 
    } 
} 
+1

你不應該那樣做。這會在大型列表中殺死你的表現。 –

2
var leadtasktype = _context.LeadTypeTaskTypes 
    .Where(l => l.LeadTypeId == item.Value 
       && l.TaskTypeId != 21); // Exclude ID = 21. 
2

難道這你什麼想要嗎?

var leadtasktype = _context.LeadTypeTaskTypes.RemoveAll 
    (l => l.LeadTypeId == item.Value && l.LeadTypeId == 21);