我有一个将 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 个动作中工作的事实,但不是让我完全困惑。
感谢您提前提供任何帮助。