2017-02-24 72 views
0

我有以下型号:无法迭代并比较两个列表

public class ProductRequest 
{ 
    public List<string> Skus { get; set; } 
} 

public class ProductResponse 
{ 
    public string Sku { get; set; } 
    public decimal Cost { get; set; } 
} 

下面的代码是接收的ProductRequest request的输入参数,并执行一个LINQ查询的方法的一部分。我想检查结果列表中是否缺少原始列表中的任何sku,但我无法提出正确的语法。它不喜欢行!costs.Contains(sku)。不知道我在做什么错了?

List<ProductResponse> costs = (from x in this.SkuManager.GetSkusBySkuNumber(request.Skus.ToList()) 
              select new ProductCostResponse 
              { 
               Sku = x.Sku, 
               Cost = x.Cost 
              }).ToList(); 

foreach (var sku in request.Skus) 
{ 
    if (!costs.Contains(sku)) 
    { 
     //some error handling here... 
    } 
} 
+0

为什么不使用'.Any',而不是'.Contains'? –

+0

'Costs'不能包含'Sku'。 'Sku'是'string'类型,'costs'中的每个'cost'都是'ProductResponse'对象。您需要遍历成本或以其他方式访问“ProductResponse.Sku”属性以进行比较。 – CDove

+0

'HashSet costSkus = new HashSet (costs.Select(c => c.Sku));'然后检查'!costSkus.Contains(sku)'; – Corak

回答

1

如果你检查任何那么你可能想使用.Any方法。

foreach (var sku in request.Skus) 
{ 
    if (!costs.Any(x => x.Sku == sku)) 
    { 
     //some error handling here... 
    } 
} 

或者你可以使用.Exists

foreach (var sku in request.Skus) 
{ 
    if (!costs.Exists(x => x.Sku == sku)) 
    { 
     //some error handling here... 
    } 
} 
+0

完美!感谢你能这么快回复。 – PixelPaul

+0

不客气。快乐的编码! –

1

使用

!costs.Any(x=>x.Sku == sku) 

甚至更​​好

costs.All(x=>x.Sku != sku) 
+0

大声笑我26秒前哈哈 –

+0

更好的是什么意思? –

+0

@EhsanSajjad寻找我的compacter并更好地描述逻辑 –