Asp.net LINQ2SQL和自定义扩展方法

Asp.net LINQ2SQL和自定义扩展方法,asp.net,linq-to-sql,extension-methods,Asp.net,Linq To Sql,Extension Methods,我在构建应用程序时遇到了一个愚蠢的步骤 我有一个关于linq 2 sql的简单查询: var recipients = cdc.Recipients.Where(r => r.Owner == Sanitize.SanitizeUserName(context.User.Identity.Name) && r.Enabled == true && (r.DisplayName.Contains(qs) || r.EmailAddress.Contains(q

我在构建应用程序时遇到了一个愚蠢的步骤

我有一个关于linq 2 sql的简单查询:

var recipients = cdc.Recipients.Where(r => r.Owner == Sanitize.SanitizeUserName(context.User.Identity.Name) && r.Enabled == true && (r.DisplayName.Contains(qs) || r.EmailAddress.Contains(qs)))
                                        .Select(r => new NVC { name = r.DisplayName, value = r.EmailAddress }).ToList();
它将一些数据带到收件人的表中,并放在自定义类中。这里一切顺利

我需要在where子句上添加一个额外的过滤器来检查电子邮件地址是否有效

我尝试使用一个简单的函数,但使用它时抛出了一个“无sql翻译”异常

在网络中挖掘时,我发现我必须使用扩展方法,因此我最终构建了以下内容:

public static Expression<Func<string, bool>> IsSaneEmail = y => (!string.IsNullOrEmpty(y) && Regex.IsMatch(y, emailPattern));

没有运气


我知道我很笨,但帮帮我吧,你的扩展方法需要以string类为目标,它应该返回bool:

public static bool IsSaneEmail(this string val) {
        return !string.IsNullOrEmpty(val) && Regex.IsMatch(val, emailPattern)
    }
排序后,您将能够调用此方法:

r.EmailAddress.IsSaneEmail()

扩展方法需要以字符串类为目标,并且应该返回bool:

public static bool IsSaneEmail(this string val) {
        return !string.IsNullOrEmpty(val) && Regex.IsMatch(val, emailPattern)
    }
排序后,您将能够调用此方法:

r.EmailAddress.IsSaneEmail()

在Linq2SQL(无法转换为SQL)中不能这样做,必须先转换为IEnumerable。

在Linq2SQL(无法转换为SQL)中不能这样做,必须先转换为IEnumerable。

不,仍然是相同的“无SQL转换”例外。在这种情况下,我想您需要使用例如ToList()将整个集合检索到内存中,然后对其进行过滤…是的,这是一个想法,但是大型集合呢?这将是无效的不,仍然是相同的“无sql转换”异常。在这种情况下,我想您需要使用例如ToList()将整个集合检索到内存中,然后对其进行过滤…是的,这是一个想法,但是大型集合呢?这将是无效的