检查属性值是否等于对象列表中的预定义值

时间:2018-10-15 09:25:37

标签: c# list linq class

我有两个这样的班

public class Stock
{
    public StockItem Item;

    public string Location;

    public int Quantity;

    public string Price;
}

public class StockItem
{
    public string Code;

    public string Name;

    public string Unit;
}

我有一个列表,其中包含Stock类的多个实例

var stockList = new List<Stock>();

我试图确定列表内每个实例的Name属性是否等于预定义的字符串。目前,我正在浏览这样的列表

foreach (var stock in stockList)
{
    if (stock.Item.Name.ToLower() == "test")
    {
        Console.WriteLine("Found the class")

        break;                      
    }
}

但是,我想知道是否有使用Linq或类似于.Contains方法的方法更有效的方法。有没有更简单或更有效的方法来完成此任务?

5 个答案:

答案 0 :(得分:0)

  

列表中每个实例的Name属性是否相等   到预定义的字符串

效率不高,但更简单:

bool allAreEqual = stockList.All(x => x.Item.Name.Equals("test", StringComparison.OrdinalIgnoreCase))

如果您想查找符合条件的第一个条件(循环的实际作用):

Stock si = stockList.FirstOrDefault(x => x.Item.Name.Equals("test", StringComparison.OrdinalIgnoreCase));

现在您知道是否存在这样的Stocksi != null),并且知道了。

答案 1 :(得分:0)

所有linq都将返回True或false

stockList.All(p => p.Item.Name.ToLower() == "test");

答案 2 :(得分:0)

您可以使用Linq def getData(spark: SparkSession, indices: Option[String]): Option[DataFrame] = { indices match { case None => { println("Undefined field.") None } case Some(ind) => { val df = spark .read.format("org.elasticsearch.spark.sql") .load(ind) Some(df) // here } } 方法:

Any()

答案 3 :(得分:0)

您真的在查看所有实例吗?从您的问题来看,似乎Any可能是可行的方式,请参见here

stockList.Any(p => p.Item.Name.ToLower() == "test");

答案 4 :(得分:0)

致电Any

可得到想要的结果
bool result = stockList.Any(
    stock => stock.Item.Name.Equals("text", StringComparison.InvariantCultureIgnoreCase)
);

在此代码中,可以根据需要更改参数名称stock