【问题标题】:How to use a LINQ statement to check if a variable already exists for any object in an existing list before adding that object to the list?在将现有列表中的任何对象添加到列表之前,如何使用 LINQ 语句检查变量是否已存在?
【发布时间】:2015-10-23 13:32:10
【问题描述】:

我正在尝试实现一个 Add 方法,该方法将汽车(对象)添加到车队(对象列表)(即将汽车添加到汽车列表)。

要添加的汽车应该是方法的参数,在将汽车添加到列表之前,我应该使用 LINQ 语句检查该汽车是否存在于列表中,以检查注册是否已经存在现有列表中的任何汽车,如果该汽车已存在于列表中,则我不添加它。

以下是我到目前为止所做的。如果有人可以提供帮助,我将不胜感激。谢谢。

        public void Add(Car carToAdd)
        {
            var regQuery = Cars.Select(car => new { car.Registration });


            foreach (var car in regQuery)
            {
                if (!regQuery.Contains(Car carToAdd.Registration))
                {
                    Cars.Add(carToAdd);
                }
                else
                {
                    Console.WriteLine("Reg already exists!");
                }
            }

【问题讨论】:

  • 请将您的代码减少到显示您的问题的最小示例

标签: c# linq visual-studio


【解决方案1】:

使用FirstOrDefault 方法,您可以检查对象是否存在于您的列表中,如果存在它是序列的第一个元素,否则在下面的示例中返回默认值它返回null。

您可以通过here了解更多关于LINQ的信息

public void Add(Car carToAdd)
{
        var qry = (from car in Cars
                   where car.Registration == carToAdd.Registration 
                   select car).FirstOrDefault();

        if(qry == null)
        {
           Cars.Add(carToAdd);
        }
        else 
        {
           Console.WriteLine("Reg already exists!");
        }
}

【讨论】:

  • 谢谢贾廷。我还有一段路要走,但这肯定有帮助。
  • @GavinMcCoy 很高兴知道这一点,编码快乐!!
【解决方案2】:

大多数答案建议使用Contains() 方法,我建议使用Any(),因为它是more flexible

if ( !Cars.Any(c => c.Registration == carToAdd.Registration) )
    Cars.Add(carToAdd);

您还可以使用SingleOrDefault() 额外确保您的汽车列表仍然满足每次注册只有一辆汽车的隐含要求:

var existing = Cars.SingleOrDefault(c => c.Registration == carToAdd.Registration) )

if(existing == null)
    Cars.Add(carToAdd);

SingleOrDefault() 会在有两个或更多元素满足条件时抛出。

【讨论】:

  • 你不认为你在你的代码块中的最后一个 if 条件中犯了一个错误吗?我想会有重复!
【解决方案3】:
public void Add(Car carToAdd)
{
    if ( !Cars.Any(c => c.Registration == carToAdd.Registration) )
    {
        Cars.Add(carToAdd);
    }
    else 
    {
        // handle case where car is already in the list
    }
}

【讨论】:

    猜你喜欢
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 2018-01-06
    • 2016-04-04
    • 1970-01-01
    • 1970-01-01
    • 2020-03-21
    相关资源
    最近更新 更多