C# 如何实现sql";%&引用;在EF?

C# 如何实现sql";%&引用;在EF?,c#,sql-server,entity-framework,linq-to-entities,C#,Sql Server,Entity Framework,Linq To Entities,我想做的是: var TheQuery = db.Conventions.Where(p => p.Categories.Contains("%")); 但它不会从数据库中返回任何内容 SQL“%”?你是说当你和一个喜欢的人一起使用时?如果是这样的话,只需使用.Contains(“产品”)即可带回以下类别: carProducts houseProducts2 i、 e.contains将返回Categories属性/字段“包含”字符串的结果,而不管字符串的任一侧是什么 或者您的意思是

我想做的是:

var TheQuery = db.Conventions.Where(p => p.Categories.Contains("%"));
但它不会从数据库中返回任何内容

SQL“%”?你是说当你和一个喜欢的人一起使用时?如果是这样的话,只需使用
.Contains(“产品”)
即可带回以下类别:

carProducts
houseProducts2
i、 e.contains将返回Categories属性/字段“包含”字符串的结果,而不管字符串的任一侧是什么

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

SQL“%”?你是说当你和一个喜欢的人一起使用时?如果是这样的话,只需使用
.Contains(“产品”)
即可带回以下类别:

carProducts
houseProducts2
i、 e.contains将返回Categories属性/字段“包含”字符串的结果,而不管字符串的任一侧是什么


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

根据你对达维肖的评论,我认为你应该这样做:

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);
}
或者它应该有一个特定名称的类别

if (!string.IsNullOrWhiteSpace(inputCategory))
{
    query = query.Where(p => p.Categories.Any(c => c.Name.Contains(inputCategory));
}

在调用ToArray、ToList或ToEnumerable(或任何其他需要客户端计算的方法)之前,不会执行实际查询。只要您坚持对查询对象使用纯LINQ调用,就可以继续使用where子句,直到您满意为止。

根据您对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);
}
或者它应该有一个特定名称的类别

if (!string.IsNullOrWhiteSpace(inputCategory))
{
    query = query.Where(p => p.Categories.Any(c => c.Name.Contains(inputCategory));
}

在调用ToArray、ToList或ToEnumerable(或任何其他需要客户端计算的方法)之前,不会执行实际查询。只要您坚持对查询对象执行纯LINQ调用,就可以继续将where子句坚持到查询对象,直到您满意为止。

可能的重复:该查询应返回所有包含
%
的行。如果这不是您所期望的,您能否更好地解释一下您的用例…?您是否试图在其类别字段中的某个位置找到带有“%”字符的约定?是否要搜索名为“%”的类别或任何类别(例如,从CATS中选择*,其中CATS.NAME LIKE%)。在后一种情况下,您可以使用p.Categories.Any(),因为我有一个包含多个字段的搜索表单,所以我要做的是,如果变量是空字符串,则为其赋值`如果(请求[“分类”]!=“”)分类=请求[“分类”];else'category=“%”//选择所有类别var TheQuery=db.Conventions.Where(p=>p.categories.intituleCategorie.Contains(categorie));可能重复:该查询应返回所有包含
%
的行。如果这不是您所期望的,您能否更好地解释一下您的用例…?您是否试图在其类别字段中的某个位置找到带有“%”字符的约定?是否要搜索名为“%”的类别或任何类别(例如,从CATS中选择*,其中CATS.NAME LIKE%)。在后一种情况下,您可以使用p.Categories.Any(),因为我有一个包含多个字段的搜索表单,所以我要做的是,如果变量是空字符串,则为其赋值`如果(请求[“分类”]!=“”)分类=请求[“分类”];else'category=“%”//选择所有类别var TheQuery=db.Conventions.Where(p=>p.categories.intituleCategorie.Contains(categorie));问题是,我需要对多个字段(24个其他字段)执行此操作,因此添加24个if。这比向数据库发送过于复杂的查询要好。请注意(根据我的实践)。Any()会生成一个巨大的db请求。小心点。问题是我需要对多个字段(24个其他字段)这样做,所以添加24个if。这比向数据库发送过于复杂的查询要好。请注意(根据我的实践)。Any()会生成一个巨大的db请求。小心点。