删除列表中的项目

时间:2017-01-12 12:52:50

标签: asp.net-mvc entity-framework linq list

我正在尝试移除gcNumber中的某个项目,但它没有被删除。以下是我的代码。我知道我在做一些愚蠢的事情,但不知道在哪里:(

 var gcn=gcNumber.ToList();
 foreach (var selectGc in gcn)
   {                
        var countToRemove = _uow.GetRepository<TripSheetGcDetail>().GetAll().Where(x => x.FkGcId == selectGc.Id && x.IsActive == true).Select(y => y);
        if(countToRemove .Count()>0)
        {                   
            gcNumber.ToList().Remove(selectGc);
        }
        else
        {
        }

   }
    return gcNumber.ToList();

如果我CountToRemove.count()>0,那么我想删除gcNumber列表中的该项目。请帮助我做错了。

3 个答案:

答案 0 :(得分:1)

gcNumber.ToList().Remove(selectGc);

此行创建一个新列表,您可以从中删除内容,然后由于您不执行任何其他操作(例如将列表分配到任何位置),将修改后的列表抛弃。

我猜你想要做的事情是这样的:

gcn.Remove(selectGc);

您还想修改foreach,以便不会对正在修改的内容进行循环。

foreach(var selectGg in gcNumber)

这将循环原始内容,允许您修改副本。

并且您可能希望返回gcn,因为您的return语句只会根据gcNumber创建另一个尚未修改的新列表。

总结:.ToList()每次都会创建一个新列表,因此修改该列表不会对原始列表做任何事情。

答案 1 :(得分:1)

而不是gcNumber.ToList().Remove(selectGc);只做gcNumber.Remove(selectGc);

答案 2 :(得分:0)

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
    public class MyClass
    {
        public string Name {get; set;}  
    }

    public static void Main()
    {

        var list = new List<MyClass>();

        list.Add(new MyClass() {Name = "aaa"});
        list.Add(new MyClass() {Name = "bbb"});
        list.Add(new MyClass() {Name = "ccc"});
        list.Add(new MyClass() {Name = "ddd"});

        var indexesToRemove = new List<int>();

        foreach(var item in list)
        {
                if(item.Name == "aaa")
                    indexesToRemove.Add(list.IndexOf(item));
        }

        foreach (var num in indexesToRemove)
            list.RemoveAt(num);


            Console.WriteLine(list.First().Name);

    }
}

Maby它不是从列表中删除项目的最佳方式,但很明显。您无法删除枚举的项目表单列表。