实体框架,DateAdd - 在选择时操纵日期

时间:2014-03-25 20:06:43

标签: 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,
                StartTime = System.Data.Objects.EntityFunctions.AddMinutes(n.StartTime, 30)
            });

我面临的挑战是,我不想指定所有属性。

是否可以执行类似

的操作
var items = context.Titles.SomethingSomething(n => 
LinqToUpdateOnly 'StartTime' property);

2 个答案:

答案 0 :(得分:0)

您可以创建一个包含原始实体的类以及您想要的任何其他属性,然后创建一个从您的实体投影到新类的转换方法。它没有您想要的那么灵活,但您可以这样做:


自定义类

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 = TranslateTitles(context.Titles.Where(x => ...));

答案 1 :(得分:0)

老学校怎么样?

var items = context.Titles.ToList();
foreach(var title in items) StartTime = StartTime.AddMinutes(30); 
相关问题