EF 6.x,LINQ-to-SQL和原始SQL子句

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EF 6.x,LINQ-to-SQL和原始SQL子句相关的知识,希望对你有一定的参考价值。

这里的首要问题是:如何将XML列查询合并到LINQ-to-SQL表达式中,以便通过IQueryable和EF 6.x将其正确转换为SQL(而不仅仅是在内存中执行)?


有没有办法在LINQ-to-SQL查询中合并原始SQL查询表达式(在这种情况下,使用由SQL Server支持的EF 6.x)

例如:

var activeSince2016 = dbContext.Users
    .Where(u => u.IsActive)
    .WhereSql("[CreatedAt] > '2016-01-01'")
    // ...
    .ToList();

上面的例子是设计的,但是,我提出问题的原因是由于EF缺乏对XML类型的支持(以及针对它们的XPath查询)。

更准确的示例查询将是:

var activeAndMillennial = dbContext.Users
    .Where(u => u.IsActive)
    .WhereSql("[UserXmlInfo].value('/Info/Age', 'int') < 25")
    // ...
    .ToList();
答案

好吧,看来我可以在EF Core 2.1中使用FromSql来解决(问题)我的问题(另请参阅Raw SQL Queries页面)

var searchTerm = ".NET";

var blogs = context.Blogs
    .FromSql($"SELECT * FROM dbo.SearchBlogs({searchTerm})")
    .Include(b => b.Posts)
    .ToList();

虽然在LINQ调用之间注入原始SQL表达式似乎仍然不可能(似乎),但这可能仍然有用。

§很久以前我个人放弃了这个。

以上是关于EF 6.x,LINQ-to-SQL和原始SQL子句的主要内容,如果未能解决你的问题,请参考以下文章

Linq-to-SQL 数据检索速度比较

EF Core Linq-to-Sql GroupBy SelectMany 不适用于 SQL Server

Linq-To-Sql 尝试插入父实体而不是子实体

使用 LINQ-to-SQL 返回已过滤子对象的对象

为啥使用 EF / Linq to sql 创建性能不佳的查询如此容易[关闭]

Linq-to-SQL 和 DateTime 的怪异