C# 方法X不支持转换为SQL-booleans和datetime

C# 方法X不支持转换为SQL-booleans和datetime,c#,linq-to-sql,C#,Linq To Sql,有没有人建议如何使LINQ to SQL支持此函数 public bool IsEnabled() { return !this.Disabled && ((!this.EnabledFrom.HasValue || this.EnabledFrom < DateTime.Now) && (!this.EnabledTo.HasValue || this.EnabledTo > DateTime

有没有人建议如何使LINQ to SQL支持此函数

public bool IsEnabled()
{
    return !this.Disabled && 
           ((!this.EnabledFrom.HasValue || this.EnabledFrom < DateTime.Now) && 
            (!this.EnabledTo.HasValue || this.EnabledTo > DateTime.Now));
}
public bool IsEnabled()
{
return!this.Disabled&&
(!this.EnabledFrom.HasValue | | this.EnabledFromDateTime.Now));
}

Disabled是bool,EnabledFrom和EnabledTo是DateTime?和所有数据库字段。

使您的
IsEnabled
方法返回一个表达式

请看这里:

如下所示(未经测试):

静态表达式IsEnabled=a=>
!a、 禁用&&
(!a.EnabledFrom.HasValue | | a.EnabledFromDateTime.Now));

您显示的代码中似乎没有任何LINQ。我怀疑这是导致您的错误的代码;query=query.Where(a=>a.PageMeta.Hidden==!visible&&a.PageMeta.IsEnabled()==visible);问题可能是它试图在SQL中查找IsEnabled。将逻辑从IsEnabled直接移动到linq查询。Linq2Sql应该将代码转换成什么样的SQL语句?什么是PageMeta?“this”在您的IsEnabled方法中指的是什么?让它返回一个表达式。看起来很棒!但是您知道如何通过EntityRef访问IsEnabled:。其中(a=>a.Account.IsEnabled)。Where将在查询中的对象上执行,但“Account”是对象上的EntityRef。这将起作用:query.Select(a=>a.Account)。Where(IsEnabled)-但是我只得到Accounts作为回报,我需要原始对象。更改后,IsEnabled不使用
Account
,而是使用
a
的类型。a可以是将Account作为EntityRef的不同类型的对象。所以我想要一个动态的解决方案。。我并不轻松;)嗯,也许能让我启用一个通用函数?否则我就没有主意了。
static Expression<Func<Account, bool>> IsEnabled = a =>
    !a.Disabled && 
    ((!a.EnabledFrom.HasValue || a.EnabledFrom < DateTime.Now) && 
     (!a.EnabledTo.HasValue || a.EnabledTo > DateTime.Now));