我有一个类,其中包含另一个类的列表,该类具有一个属性,我想检查它是否有多个不同的值。
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
答案 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;
}
}