2013-10-29 200 views
0

新的集合,我想從列表中刪除已使用的項目來填充下拉列表C#創建兩個集合

private void SetAvailableCodes(IEnumerable<ProductCodeVm> productCodes) 
{ 
    var availableCodes = from item in Enum.GetNames(typeof(ProductCodeType)) 
         where item != ProductCodeType.None.ToString() 
         select new 
         { 
          Id = (int)((ProductCodeType)Enum.Parse(typeof(ProductCodeType), item)), 
          Name = item 
         }; 
    // Todo remove productCodes.ProductCodeType 
    this.ViewData["CodeList"] = availableCodes; 
} 

public class ProductCodeVm 
{ 
    public int Id { get; set; }   
    public int ProductId { get; set; }   
    public ProductCodeType ProductCodeType { get; set; }  <--- Enum 
    public string Value { get; set; }  
} 

有沒有辦法實現這一目標使用LINQ,或做我需要做一些鑄造還是別的什麼?

可用的代碼來自Db的

// Add codes 
var codes = ProductCodeManager.GetByProductId(model.Id); 
model.ProductCodes = 
codes.Select(
    c => 
    new ProductCodeVm 
    { 
     ProductCodeType = c.ProductCodeType, 
     Value = c.Value, 
     ProductCodeId = c.ProductCodeId 
    }); 
this.SetAvailableCodes(model.ProductCodes); 

可用的代碼僅用於填充下拉列表(ID,姓名)

this.ViewData["CodeList"] = availableCodes; 
+0

你想刪除或剛纔給他們,也,你是什麼「已使用」的意思,你的意思是你只是想要procutCodes的獨特列表? –

+0

如何定義項目是否已被使用? –

+0

我認爲你需要澄清什麼被刪除。您將'ProductCodeVm'列表傳遞給方法,但在創建分配給'ViewData [「CodeList」]''的'availableCodes'變量時,實際上不會使用它。 –

回答

5

您可以使用Except()

IEnumerable<string> remainingList = allItemsList.Except(usedItemList); 
0

假設productCodes是要過濾的代碼列表,它將更容易過濾o ñ而不是所以你不要;噸有儘可能多的分析要做到:

var availableCodes =  
    Enum.GetValues(typeof(ProductCodeType)) 
     .Except((int)ProductCodeType.None) 
     .Except(productCodes.Select(p => p.Id) 
     .Select(p => new { 
           Id = p; 
           Name = ((ProductCodeType)p).ToString(); 
         }