这里的首要问题是:如何将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表达式似乎仍然不可能(似乎),但这可能仍然有用。
§很久以前我个人放弃了这个。