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

时间:2017-10-20 02:57:02

标签: sql entity-framework linq linq-to-sql

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

有没有办法在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();

1 个答案:

答案 0 :(得分:0)

好吧,看来可以使用EF Core 2.1中的FromSql来解决我的问题(有点)(另请参阅Raw SQL Queries 上的页面)< / p>

var searchTerm = ".NET";

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

尽管仍然不可能(看起来似乎是)在LINQ调用之间插入原始SQL表达式,但这仍然可能会有所帮助。§

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