我有一个将 JSON 返回到 jQuery 数据表的操作。返回的数据可以根据传递给它的参数进行过滤。这是代码:
public ActionResult IndexAjaxHandler(jQueryDataTableParamModel parameters) {
    var data = _mailingListRep.GetAllWithinAccount();
    IEnumerable<MailingList> filtered;
    // Filtering - THIS DOES NOT WORK!
    if (!string.IsNullOrEmpty(parameters.sSearch)) {
        filtered = data.Where(c => 
            c.MailingListName.Contains(parameters.sSearch) ||
            ((c.IsDoubleOptIn) ? "Yes" : "No").Contains(parameters.sSearch, StringComparison.OrdinalIgnoreCase) ||
            c.Created.ToString("dd MMM yyyy").Contains(parameters.sSearch) ||
            c.ActiveMembers.Count().ToString().Contains(parameters.sSearch) ||
        c.AvailableSegments.Count().ToString().Contains(parameters.sSearch)
        );
    }
    else {
        filtered = data;
    }
    // create json object
    // return;
}
问题是这给了我以下错误:
方法 'Boolean Contains(System.String, System.String, System.StringComparison)' 不支持对 SQL 的转换。
但
在同一个控制器中是另一个操作,它也将 JSON 返回到数据表,它使用完全相同的过滤方法并且工作正常!
public ActionResult ViewDeletedAjaxHandler(int id, jQueryDataTableParamModel parameters) {
    var list = _mailingListRep.GetByIDWithinAccount(id);
    var data = list.DeletedMembers;
    IEnumerable<MailingListMember> filtered;
    // Filtering - THIS WORKS, NO ERRORS!
    if (!string.IsNullOrEmpty(parameters.sSearch)) {
        filtered = data.Where(c => 
            c.EmailAddress.Contains(parameters.sSearch, StringComparison.OrdinalIgnoreCase) ||
            c.UnsubscribedDate.ToString("dd MMM yyyy").Contains(parameters.sSearch, StringComparison.OrdinalIgnoreCase)
        );
    }
    else {
        filtered = data;
    }
    // create json object
    // return;
}
有人知道为什么是这样吗?
供参考,Contains(string, comparison)是一种扩展方法:
public static bool Contains(this string source, string toCheck, StringComparison comp) {
    return source.IndexOf(toCheck, comp) >= 0;
}
我理解错误的含义,这是代码在 1 个动作中工作的事实,但不是让我完全困惑。
感谢您提前提供任何帮助。