LinqToSQL:使用自定义方法计算表达式

本文关键字:计算 表达式 自定义方法 LinqToSQL | 更新日期: 2023-09-27 18:36:39

我正在运行 Linq To SQL 查询,并希望根据表中的某些设置检索计算列,我想向日期字段添加时间单位。

我正在运行以下内容:

var q = from p in db.PublicHolidays
select new {
     Holiday = s.Holiday,
     ReminderDay = Convert.ToDateTime(p.Holiday).AddByUnit(p.ReminderUnits, -p.ReminderQuantity)
};

在我的日期计算中,我收到一个错误,'System.DateTime' does not contain a definition for 'AddByUnit'.

Intellisense确实提出了AddByUnit,所以我不确定出了什么问题。 删除显式日期转换会产生相同的错误

LinqToSQL:使用自定义方法计算表达式

正如错误消息所说,方法AddByUnit(可能是extension method)未被发现在运行时运行。确保代码可以看到此方法。

给Linq to Sql的重要提示

不能在 linq-to-sql 中使用自定义方法。根据您使用的提供商,它将不支持,因为linq-to-sql会尝试将您的linq query转换为sql query。尝试将您需要的属性带入anonymous object成具体结果,并在内存中以此为导向。对于样品。

// call ToList() to execute it on database and bring to memory.    
var list = (from p in db.PublicHolidays
            select new {
                Holiday = s.Holiday,
                ReminderUnits = p.ReminderUnits
                ReminderQuantity = p.ReminderQuantity
            }).ToList();
// use it in memory
var result = list.Select(x => new {
                  Holiday = x.Holiday,
                  ReminderDay = Convert.ToDateTime(x.Holiday).AddByUnit(x.ReminderUnits, -p.ReminderQuantity))
              }).ToList();