如何实现sql";%";在EF中

本文关键字:quot EF sql 何实现 实现 | 更新日期: 2023-09-27 18:28:59

我想做的是:

var TheQuery = db.Conventions.Where(p => p.Categories.Contains("%"));

但数据库中没有返回任何内容!

如何实现sql";%";在EF中

根据你对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子句,直到您满意为止。

SQL"%"?你的意思是和LIKE一起使用吗?如果是这样,只需使用.Contains("Products")带回类别,如:

carProducts
houseProducts2

即contains将返回Categories属性/字段"包含"字符串的结果,而不管字符串的任一侧是什么。

或者您的意思是希望类别包含字符"%"?(您现在已经成功地做到了)