使用Linq确定类中是否有超过2个不同的项

时间:2017-03-22 08:55:05

标签: c# linq

我有一个类,其中包含另一个类的列表,该类具有一个属性,我想检查它是否有多个不同的值。

e.g

public class BasketModel
{
    public BasketModel()
    {
        BasketOrderLines = new List<BasketOrderLine>();
    }
    .
    . 
    .

 public class BasketOrderLine
{
    public int OrderLineId { get; set; }
    public string ImageUrl { get; set; }
    public string ProductType { get; set; }
               .
               .

给定一个购物篮模型对象,我想知道ProductType中是否有多个不同的值。

例如,如果所有产品类型都是“A”,那么这将是错误的,如果3个产品类型为“A”而另一个产品类型为“B”,那么这将是真的。

干杯 MACCA

5 个答案:

答案 0 :(得分:3)

您的标题:&#34;超过两个不同的&#34; ,您的问题正文:&#34;多个不同的&#34;

如果标题是拼写错误:

bool notDistinctTypes = theBasket.BasketOrderLine
    .Select(o => o.ProductType)
    .Distinct()
    .Skip(1)
    .Any();

这并不需要枚举所有项目以确定是否有多个ProductType

答案 1 :(得分:1)

// Does this basket contains three or more types
public bool HasSeveralTypes(BasketModel basket)
{
    if (basket == null)
        return false;

    int differentTypes = basket.BasketOrderLines 
                               .Select(l => l.ProductType)
                               .Distinct()
                               .Count();

    return (differentTypes > 2);
}

答案 2 :(得分:0)

这样的事情:

Public bool CheckDistinct (){
    var res = basketOrderLines.Select(o => o.ProductType).Distinct ().Count ();

    return res > 1;
}

答案 3 :(得分:0)

有几种方法可以做到这一点,这里有一个:

public class BasketModel
{
    public BasketModel()
    {
        BasketOrderLines = new List<BasketOrderLine>();
    }

    public bool HasMulitpleDistinctProducts
    {
        get
        {
            if (!BasketOrderLines.Any())
            {
                return true; // or false?
            }
            return BasketOrderLines.Select(b => b.ProductType).Distinct().Count() > 1;
        }
    }
}

答案 4 :(得分:0)

这是您可以直接从列表中调用的类型扩展名。此代码的优点是适用于实现-f的任何类型,而不仅仅是IEquals +来自您的代码的使用。

代码:

string

如何致电:

public static class Tools
{
    public static bool fDistinctProductType(this List<BasketOrderLine> lstToAnalyse)
    {
        BasketOrderLine ProductTypeA = lstToAnalyse.FirstOrDefault();
        if (ProductTypeA == null) // It's null when lstToAnalyse is empty
            return false;

        BasketOrderLine ProductTypeB = lstToAnalyse.Where(b => b.ProductType.Equals(ProductTypeA.ProductType)).FirstOrDefault();
        if (ProductTypeB == null) // It's null when it doesn't exists a distinct ProductType
            return false;

        return true;
    }
}