TimeSpan time24 = new TimeSpan(24, 0, 0);
TimeSpan time18 = new TimeSpan(18, 0, 0);
// first get today's sleeping hours
List<Model.Sleep> sleeps = context.Sleeps.Where(
o => (clientDateTime - o.ClientDateTimeStamp < time24) &&
o.ClientDateTimeStamp.TimeOfDay > time18 &&
clientDateTime.TimeOfDay < time18 &&
o.UserID == userid).ToList();
Run Code Online (Sandbox Code Playgroud)
此Linq表达式抛出此异常:
DbArithmeticExpression arguments must have a numeric common type.
Run Code Online (Sandbox Code Playgroud)
请帮忙!
有没有办法在LINQ或LINQ-to-Entities中批量删除与给定查询匹配的一堆对象?我能找到的唯一引用已经过时了,迭代并手动删除我想删除的所有对象似乎很愚蠢.
我有如下图所示的表格:

如何使用基于ProjectId的Entity FrameWork删除表的所有记录?
我试图从表中删除多行.
在常规SQL Server中,这很简单,如下所示:
DELETE FROM Table
WHERE
Table.Column = 'SomeRandomValue'
AND Table.Column2 = 'AnotherRandomValue'
Run Code Online (Sandbox Code Playgroud)
在Entity Framework 6中,他们引入了RemoveRange()方法.
但是,当我使用它时,Entity Framework不是使用我提供的where子句删除行,而是查询数据库以获取与where子句匹配的所有行,并使用其主键逐个删除它们.
这是EntityFramework的当前限制吗?或者我使用RemoveRange()错了?
以下是我的使用方法RemoveRange():
db.Tables.RemoveRange(
db.Tables
.Where(_ => _.Column == 'SomeRandomValue'
&& _.Column2 == 'AnotherRandomValue')
);
Run Code Online (Sandbox Code Playgroud) 我需要使用Entity Framework Core从数据库中删除多行.
此代码不起作用:
foreach (var item in items)
{
myCollection.Remove(item);
}
Run Code Online (Sandbox Code Playgroud)
因为我收到错误"InvalidOperationException:Collection被修改;枚举操作可能无法执行"在第一个对象之后.换句话说,.Remove只删除一个对象.
实体框架核心没有.RemoveRange,所以我不知道如何执行此操作.
为了保持与各种数据库提供程序的最大兼容性,我宁愿不调用context.Database.ExecuteSqlCommand("从physical_table中删除where ...").有合适的解决方案吗?谢谢!
我有一个包含约60,000行的数据库表(在SQL Server 2012 Express上运行).
我使用以下代码清除旧行:
//Deleting CPU measurements older than (oldestAllowedTime)
var allCpuMeasurementsQuery = from curr in msdc.CpuMeasurements where
curr.Timestamp < oldestAllowedTime select curr;
foreach (var cpuMeasurement in allCpuMeasurementsQuery)
{
msdc.CpuMeasurements.Remove(cpuMeasurement);
}
Run Code Online (Sandbox Code Playgroud)
当删除的行数很大(删除表中约90%或更多的记录)时,操作需要特别长的时间.在相对较强的机器(Intel I5台式机)上完成此操作大约需要30分钟.
这看起来像一个正常的行为吗?
关于我可以做些什么来减少操作时间的任何想法?
谢谢,
我想知道是否有一种使用Entities Framework 4进行批量删除或删除多行的好方法.我无法找到一个DeleteAll命令.唯一可用的是DeleteObject(),它只占用一个实体,我想在实体列表上执行删除.有没有比通过列表循环更好的方法?我确实看到一篇文章使用了ExecuteStoreQuery并创建了一些可以执行删除的sql.有没有比执行这两个选项更好的方法请告知执行此操作的最佳方法是什么.
我对Entity Framework完全不熟悉,所以请原谅我,如果我的逻辑偏差/这是事情已经发挥作用的方式,但我正在开发一个应用程序,其中:
ParentIdParentId,我将数千条记录存储在父表中具有一对多外键关系的子表中.因此,如果父母的信息发生变化(这可能经常发生),我想要做的是让我的程序执行相当于:
DELETE FROM ChildTable WHERE ParentId = 'xx'
Run Code Online (Sandbox Code Playgroud)
在使用相同ParentId的新/更新值更新子表之前.
从我所看到的,我这样做的方式是:
ctx.Database.ExecuteSqlCommand()概念类型输入实际的SQL命令以最有效的方式在EF中执行此操作的正确方法是什么?
我在sql中有一个tblA:
id int (primary key)
fid int
Run Code Online (Sandbox Code Playgroud)
tblA中的数据是:
1 1
2 1
3 2
4 2
5 3
6 3
Run Code Online (Sandbox Code Playgroud)
我通过以下代码删除一条记录:
DatabaseEntities obj = new DatabaseEntities();
int i = 2;
tblA t = obj.tblA.Where(x => x.fid == i).FirstOrDefault();
obj.DeleteObject(t);
obj.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
我通过以下代码删除多个记录:
DatabaseEntities obj = new DatabaseEntities();
int i = 2;
while (obj.tblA.Where(x => x.fid == i).Count() != 0)
{
tblA t = obj.tblA.Where(x => x.fid == i).FirstOrDefault();
obj.DeleteObject(t);
obj.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
是否有任何解决方案可以删除linq中的多个记录到实体?
我在聚簇索引上删除了大约5000行我的表,而EF需要将近30秒才能完成.
记录生成的SQL显示它正在为每一行执行一次删除:
DELETE [dbo].[Table]
WHERE ([ColumnID] = @0)
Run Code Online (Sandbox Code Playgroud)
所以共有5000笔交易.
我已经尝试批量调用SaveChanges(),但这似乎没有提高性能,或改变上述行为.
//loop
{
//get batch
db.Table.RemoveRange(batch);
db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
我看了一些其他问题,指出了每行执行删除命令的这个缺陷,但之后没有提出建议: 如何在Entity Framework中删除多行(没有foreach)
有没有办法阻止EF每行执行一个命令?如果可能的话,我想避免使用内联SQL.
c# ×9
linq ×3
database ×2
.net ×1
ado.net ×1
asp.net ×1
delete-row ×1
optimization ×1
sql ×1
vb.net ×1