如何在EF中实现sql“%”?

时间:2012-03-23 10:20:17

标签: c# sql-server entity-framework linq-to-entities

我想做的是:

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

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

2 个答案:

答案 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属性/字段“包含”字符串,而不管其中的哪一方。

或者您的意思是您希望类别包含字符'%'? (你现在成功地做到了这一点)