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
上进行包含。是的,我已经添加了它,并且它是列表类型,因为我们正在选择新的数据类型列表?哦,我的错,这是以前版本的答案。我更新了,现在应该可以了。对不起!谢谢你抽出宝贵的时间!