2017-06-20 41 views
1

看起來很相似,但我的問題是完全不同的。我有一個由不同界面實現的對象組成的列表。 我想刪除一個特定類型的對象,但通過另一個標準之後。示例代碼如下。C#LINQ在單次執行中從列表中刪除多個對象

// remove the not required parameters 
foreach (EndPoint endPoint in endPoints) 
{     
    var maps = endPoint.EndPointParameters 
     .Where(x => x is IEndPointParamMapCustom) 
     .Cast<IEndPointParamMapCustom>() 
     .Where(x => !x.IsActive) 
     .ToList(); 

    foreach (var custom in maps) 
    { 
     endPoint.EndPointParameters.Remove(custom); 
    } 
} 

我想刪除下面的foreach循環並刪除上面的單個LINQ查詢中的對象。可能嗎? 謝謝。

+1

在一般LINQ不應該用來修改對象,但要查詢他們 –

+1

我想這是可能的,但問題是:爲什麼? Y我們的代碼非常直截了當,易於理解,因此可以維護。介紹任何進一步的LINQ只會搞亂你的代碼。 – HimBromBeere

+1

鑑於LINQ中的'Q'代表***查詢***,您將永遠不會執行此「單個查詢」突變而不會濫用LINQ的意圖。 – spender

回答

1

如果EndPointParametersList<T>( 「從列表刪除多個對象」),你可以嘗試RemoveAll而不是的Linq

// Remove the not required parameters 
foreach (EndPoint endPoint in endPoints) 
{ 
    // Remove all items from EndPointParameters that both 
    // 1. Implement IEndPointParamMapCustom 
    // 2. Not IsActive 
    endPoint 
     .EndPointParameters     
     .RemoveAll(item => (item as IEndPointParamMapCustom)?.IsActive == false); 
} 
2

可以使用RemoveRange功能 endPoint.endPointParameters.RemoveRange(maps)

+0

謝謝。但我要求將這兩個語句合併爲一個。不只是使用removerange。 –

+0

您提供的語法給出了構建錯誤。看起來你甚至沒有自己檢查代碼。 –