2013-10-29 167 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(); 
         }