C# 实体框架,日期添加-选择后操作日期
在保持通配符选择的灵活性的同时,是否可以操纵EF查询中的日期 在旧式SQL中,您可以这样做C# 实体框架,日期添加-选择后操作日期,c#,sql,entity-framework,C#,Sql,Entity Framework,在保持通配符选择的灵活性的同时,是否可以操纵EF查询中的日期 在旧式SQL中,您可以这样做 SELECT ID, Name, DATEADD (minute, 30, [StartTime]) AS [StartTime] FROM Titles 我知道你可以在EF中使用相同的 var items = context.Titles.Select(n => new { ID = n.ID, Name= n.Name,
SELECT ID, Name,
DATEADD (minute, 30, [StartTime]) AS [StartTime]
FROM Titles
我知道你可以在EF中使用相同的
var items = context.Titles.Select(n => new {
ID = n.ID,
Name= n.Name,
StartTime = System.Data.Objects.EntityFunctions.AddMinutes(n.StartTime, 30)
});
我面临的挑战是,我不希望必须指定所有属性
有可能做像这样的事情吗
var items = context.Titles.SomethingSomething(n =>
LinqToUpdateOnly 'StartTime' property);
?您可以创建一个包含原始实体和所需任何附加属性的类,然后创建一个从实体投影到新类的转换方法。它不像您所期望的那样灵活,但您可以这样做:
自定义类
public class TitlePoco
{
public Title Title { get; set; }
public DateTime StartTime { get; set; }
}
处理所有所需翻译的单个点
public IQueryable<TitlePoco> TranslateTitles(IQueryable<Title> query)
{
return query.Select(n => new TitlePoco {
Title = n,
StartTime = System.Data.Objects.EntityFunctions.AddMinutes(n.StartTime, 30)
});
}
这个旧学校的怎么样
var items = context.Titles.ToList();
foreach(var title in items) StartTime = StartTime.AddMinutes(30);
绝对不是。“ToList()”将导致执行查询并在之后进行属性更新。这种简单的大规模操作最好放在SQL Server上。事实上,这就是我正在做的:)但它仍然不能回答问题(希望我问得对)。我特别不希望必须选择“.Select(n=>new…””。关键是我希望查询本身是灵活的。如果我添加了一个列(和poco类属性),我不想通过整个DAL来更改“.Select”(n=>new'语句。@Michael'mital'Pedersen-您能举例说明为什么要直接修改实体属性,而不是通过分部类添加属性吗?这都是性能问题。比如说“StartTime”是UTC,我希望显示100000条记录,其中日期时间转换为不同的时区。在这种情况下,我希望SQL Server添加120分钟(示例)在返回结果之前启动时间。这应该比调用部分类中的属性100000次要好得多。@Michael'mital'Pedersen,创建一个包含实体和任何附加属性的类怎么样?这样,您就不必担心实体上的任何属性发生更改,但您仍然可以执行caL sql server上的计算对于任何其他属性,请查看更新的回答。我也考虑过这一点。我没有这样做的唯一原因是,它将在实体中引入第二个“层”,这是我试图避免的。然而,对于此应用程序,性能比可维护性更重要(:-/),所以我不得不把我对DAL代码逻辑异常的厌恶放在一边,按照你的建议去做。我接受这个答案。谢谢:-)
var items = context.Titles.ToList();
foreach(var title in items) StartTime = StartTime.AddMinutes(30);