所以我想为我的数据制作一个通用的排序器。我有这段代码从数据库中获取数据,它将仅提取包含value
的数据。
using System.Linq.Dynamic;
public static IQueryable<object> SortList(string searchString, Type modelType,
IQueryable<object> model)
{
....
string toStringPredicate = type == typeof(string) ? propertyName +
".Contains(@0)" : propertyName + ".ToString().Contains(@0)";
model = model.Where(propertyName + " != NULL AND " + toStringPredicate, value);
}
这是模型:
public class ManageSubscriberItems
{
public int? UserId { get; set; }
public string Email { get; set; }
public Guid SubscriberId { get; set; }
}
当我调用时:
models = (IQueryable<ManageSubscriberItems>)EcommerceCMS.Helpers.FilterHelper
.SortList(searchString, typeof(ManageSubscriberItems), models);
if(models.Any())
出现以下错误:
"LINQ to Entities 不认识 'System.String ToString()' 方法,这种方法无法转换成存储表达式。"
编辑
我找到了问题所在,但是仍然无法解决。如果属性不是 string
,那么调用 .ToString().Contains()
会抛出错误。
model = model.Where(propertyName + " != NULL AND " + propertyName +
".ToString().Contains(@0)", value);
我想在查询中实现LIKE
操作。有人可以帮忙吗?
SqlFunctions.StringConvert
。 - NetMageIQueryable
形式的 Linq to SQL。如果我先调用ToList()
或ToEnumerable()
,它可能会起作用,但我不想在内存中处理这个。我尝试在动态表达式(以字符串形式编写)中使用SqlFunctions.StringConvert
,但它给我一个错误。现在我只能检查它是否为数字,我使用==
,如果它是字符串,我使用.Contains()
。这不是我想要的。它的行为不像Like
运算符。 - Alvin Stefanus