C# 是否可以将编写EF核心查询与LINQ和动态字符串查询混合使用?

C# 是否可以将编写EF核心查询与LINQ和动态字符串查询混合使用?,c#,entity-framework-core,ef-core-2.0,C#,Entity Framework Core,Ef Core 2.0,我希望能够用LINQ编写大部分查询,但随后将WHERE子句作为字符串编写,就像编写动态查询一样。比如: var query=来自上下文中的零件。CurrentInventory query.Where=“类似于“%a%”的part.PartNumber或类似于“%b%”的part.PartNumber 原因是WHERE可能变得相当大,并且使用EF.函数。例如和Contains确实会减慢查询速度 我可以动态地构建整个过程并只执行字符串,但我希望避免这种情况。您可以使用之前的工作 Insta

我希望能够用LINQ编写大部分查询,但随后将
WHERE
子句作为字符串编写,就像编写动态查询一样。比如:

var query=来自上下文中的零件。CurrentInventory

query.Where=“类似于“%a%”的part.PartNumber或类似于“%b%”的part.PartNumber

原因是WHERE可能变得相当大,并且使用
EF.函数。例如
Contains
确实会减慢查询速度

我可以动态地构建整个过程并只执行字符串,但我希望避免这种情况。

您可以使用之前的工作

    Install-Package System.Linq.Dynamic
询问

   query.Where = "part.PartNumber LIKE '%a%' OR part.PartNumber LIKE '%b%'
可以重新编写为:

    query.Where ("part.PartNumber.Contains(@0) or part.PartNumber.Contains(@1)","a" ,"b")
工作示例

更新:

我在EntityFramework中使用了动态Linq

      using (var context = new NorthwindEntities())
        {
            var customers = context.Customers.Where("ContactName.Contains(@0) or ContactName.Contains(@1)", "Maria","Carine").ToList();
            Console.WriteLine(customers.Count);
        }
生成的Sql(从Sql事件探查器中可以看到)是:

where条件转换为:

     WHERE ([Extent1].[ContactName] LIKE N'%Maria%') OR ([Extent1].[ContactName] LIKE N'%Carine%')  

如果您担心该查询的性能,您可以随时使用ADO.NET或dapper之类的工具。或者您可以创建存储过程、视图,以满足您的要求。我通常设置项目的方式是使用dapper进行复杂查询,使用EF执行命令。@12秒谢谢。我将尝试dapper,看看它是否适用于某些情况像这样。我喜欢EF。所以很遗憾它在这么小的东西上有问题。EF.函数有什么问题吗?像?@IvanStoev构建查询的WHERE部分需要花费很长时间。大约3-4秒,甚至在查询执行之前。啊。这看起来正是我要找的。我会尝试一下。谢谢暗示。
     WHERE ([Extent1].[ContactName] LIKE N'%Maria%') OR ([Extent1].[ContactName] LIKE N'%Carine%')