Entity Framework v4.1 LIKE

前端 未结 3 2161
清酒与你
清酒与你 2020-12-06 18:00

How do I have to build my query to result in an output SQL query like:

SELECT
[viewRegisters].[Id] AS [IdRegister]
WHERE Name LIKE \'%a%bc\'
<
相关标签:
3条回答
  • 2020-12-06 18:34

    If you are using SQL Server, use the PATINDEX function to do a pattern search. You can access this function through EF using the SqlFunctions class.

    For example, the following EF query

    context.ViewRegisters.Where(z => SqlFunctions.PatIndex("a%b%c%", z.Name) > 0);
    

    will translate into

    SELECT 
    [Extent1].[Id] AS [Id], 
    [Extent1].[Name] AS [Name]
    FROM [dbo].[ViewRegisters] AS [Extent1]
    WHERE (CAST(PATINDEX(N'a%b%c%', [Extent1].[Name]) AS int)) > 0
    
    0 讨论(0)
  • 2020-12-06 18:39

    You must use ESQL if you want full wildcard support. Linq-to-entities is not able to do that and EFv4.1 code first (without EDMX) doesn't have support for model defined functions so the solution provided by @Johann Blais cannot be used.

    I guess the code to run ESQL query can look like:

    string command = "SELECT VALUE e FROM ContextName.DbSetName AS e WHERE e.Field LIKE 'a%b%c%'"
    ObjectContext ctx = ((IObjectContextAdapter)dbContext).ObjectContext;
    ObjectQuery<EntityType> query = new ObjectQuery<EntityType>(command, ctx);
    ObjectResult<EtntiyType> result = query.Execute(MergeOption.AppendOnly);
    
    0 讨论(0)
  • 2020-12-06 18:49
    var query = from viewRegister in context.ViewRegisters
    where viewRegister.Name.Contains("yourname")
    select viewRegister;
    
    0 讨论(0)
提交回复
热议问题