C# 从列表中删除其他列表中不存在的项

C# 从列表中删除其他列表中不存在的项,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个表Data,有两个字段Id和Value 我已经创建了数据表的实体模型 现在,经过一些操作后,我有两个列表: 数据库中的数据列表为List dbData=dbcontext.Datas.ToList() 我生成的数据列表会抛出一些其他平均值,即myData dbData和myData属于同一类型,即List 现在我想从dbData中删除Data项,其中dbData的ID在myData中不存在 例如: 假设dbData和myData的值如下: dbData => Id = 1 ,

我有一个表
Data
,有两个字段
Id
Value

我已经创建了
数据
表的实体模型

现在,经过一些操作后,我有两个列表:

  • 数据库中的数据列表为
    List dbData=dbcontext.Datas.ToList()
  • 我生成的数据列表会抛出一些其他平均值,即
    myData
dbData
myData
属于同一类型,即
List

现在我想从
dbData
中删除
Data
项,其中
dbData
的ID在
myData
中不存在

例如: 假设
dbData
myData
的值如下:

dbData => Id = 1 , Value = "value1"
          Id = 2 , Value = "value2"
          Id = 3 , Value = "value3"

myData => Id = 1 , Value = "value1"
          Id = 2 , Value = "value2"
我想删除第三行,因为它不在myData中,但仍在数据库列表中

我试着像这样做

 foreach(var d in dbData)
                {
                    foreach(var m in myData)
                    {
                        if(d.Id != m.Id)
                        {
                            db.Datas.Remove(d);
                            db.SaveChanges();
                            break;
                        }
                    }
                }

我不认为这样做是正确的

Try
dbData.RemoveAll(=>!myData.Exists(t=>t.Id===\uid))

dbData只包含值1和2,无需将所有数据加载到内存中,只需执行
List dbData=dbcontext.Datas.ToList()

您只能加载要删除的实体:

var myDataIds = myData.Select(a => a.Id).ToList(); var dataToDelete = db.Datas.Where(a => myDataIds.Contains(a.Id)).ToList(); db.Datas.RemoveRange(dataToDelete); db.SaveChanges(); var myDataIds=myData.Select(a=>a.Id.ToList(); var dataToDelete=db.Datas.Where(a=>myDataIds.Contains(a.Id)).ToList(); 数据库数据删除器(dataToDelete); db.SaveChanges(); 仅仅为了删除数据而加载数据仍然不理想。不过,在这种情况下,您将只加载1个实体,而不是3个


你熟悉整洁吗?这是一个微型ORM,它允许您通过编写sql查询来实现这一点。在我工作的项目中,我们使用EntityFramework和Dapper,并根据我们的需要进行选择。

你能给我们展示一下你的尝试吗?@StefanoCavion我刚刚做了。请看一看。请不要将
\uu
用作除丢弃之外的任何东西。它在这种情况下可能有效,但在其他情况下可能会导致编译错误。总的来说,这会让人更加困惑。
包含(a.Id)
时出错。无法将int转换为数据您是否添加了
var myDataIds=myData.Select(a=>newdata(){Id=a.Id}).ToList()?应该是
List
类型。应该在
myDataIds
上进行包含,而不是在
db.Datas
上进行包含。是的,我已经添加了它,并且它是列表类型,因为我们正在选择新的数据类型列表?哦,我的错,这是以前版本的答案。我更新了,现在应该可以了。对不起!谢谢你抽出宝贵的时间!