我想做的是:
var TheQuery = db.Conventions.Where(p => p.Categories.Contains("%"));
但它没有从数据库返回任何内容!
答案 0 :(得分:1)
根据你对DaveShaw的评论,我认为这是你应该做的:
IQueryable<Convention> query = db.Conventions;
if (!string.IsNullOrWhiteSpace(inputCategory))
{
query = query.Where(p => p.Categories.Contains(inputCategory));
}
if (!string.InNullOrWhiteSpace(inputName))
{
query = query.Where(p=> p.Name == inputName);
}
等
现在,如果您想确保您的公约至少有一个类别,您可以使用.Any()
if (string.IsNullOrWhiteSpace(inputCategory))
{
query = query.Where(p => p.Categories.Any());
}
或者它是否应该具有任何具有特定名称的类别
if (!string.IsNullOrWhiteSpace(inputCategory))
{
query = query.Where(p => p.Categories.Any(c => c.Name.Contains(inputCategory));
}
在您调用ToArray,ToList或ToEnumerable(或需要客户端评估的任何其他方法)之前,不会执行实际查询。只要你坚持在Query对象上进行纯LINQ调用,你就可以继续坚持使用where子句,直到你满意为止。
答案 1 :(得分:0)
SQL“%”?你是说和LIKE一起使用的吗?如果是这样,只需使用.Contains("Products")
带回类别,如:
carProducts
houseProducts2
即。包含将返回结果,其中Categories属性/字段“包含”字符串,而不管其中的哪一方。
或者您的意思是您希望类别包含字符'%'? (你现在成功地做到了这一点)