是否可以使用LINQ to Entities而不是原始SQL来编写此查询?
SELECT *
FROM Articles
CROSS APPLY string_split(Tags, ',')
WHERE value IN ('programming', 'sql')
表格是这样的
CREATE TABLE Articles(Id int IDENTITY(1,1) NOT NULL PRIMARY KEY, Title nvarchar(max) NOT NULL, Tags nvarchar(max) NOT NULL);
INSERT INTO Articles (Title, Tags) VALUES ('First', 'programming,sql');
INSERT INTO Articles (Title, Tags) VALUES ('Second', 'programming,csharp');
更新:使用已定义的表值函数可以SELECT ... CROSS APPLY ...
var tags = new[] { "programming", "sql" };
var articles = from a in db.Articles
join awt in db.ArticlesWithTags() on a.Id equals awt.Id
where tags.Contains(awt.Tag)
select a;
有没有办法在EF中调用系统表值函数?
答案 0 :(得分:-1)
当然,它可以翻译成LINQ:
var res = from a in db.Articles.AsEnumerable()
from tag in a.Tags.Split(',')
select new {
Id = a.Id,
Title = a.Title,
Tags = a.Tags, // you probably don't want this
Tag = tag
};
您当然应该明白,Tags.Split(',')
不会直接转换为string_split
。而是在SQL中调用SELECT
,然后在AsEnumerable()
调用的结果中在.NET中执行字符串拆分和新对象创建。