1

在构建我的应用程序时,我陷入了一个愚蠢的步骤。

我对 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));

(其中 emailPattern 是一个正则表达式字符串)

但是如何应用于我的查询?我试图添加 where 子句

... && IsSaneEmail(r.emailAddress) && ...

或者

... && r.EmailAddress.IsSaneEmail() && ...

没有运气。

我知道我很笨 但请帮帮我

4

2 回答 2

1

你不能在 Linq2SQL 中做到这一点(不能翻译成 SQL),你必须首先转换为 IEnumerable。

于 2012-09-17T09:09:08.250 回答
0

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

public static bool IsSaneEmail(this string val) {
        return !string.IsNullOrEmpty(val) && Regex.IsMatch(val, emailPattern)
    }

排序后,您将能够这样调用此方法:

r.EmailAddress.IsSaneEmail()
于 2012-09-17T09:07:22.440 回答