我需要一个非常简单的查询,可以用sql编写,但我无法使用Entity Framework编写它。
请求: 我有一个文件夹表,我需要获得" FullPath"包含存储在内存集合中的以下单词。
Folder Table:
Id Name FullPath
06D5DA4D Settings Root/Portals/aaa/Version1PRD/Settings
0AF5C112 Settings Root/Portals/bbb/Version1STG/Settings
E2A989BB Settings Root/Portals/ccc/Version1/Settings
B019A05D Settings Root/Portals/ddd/Version1STG/Settings
我的申请表上的列表。
List<FolderViewModel> lst = new List<FolderViewModel>();
lst.Add(new FolderViewModel{PortalCode="aaa"});
lst.Add(new FolderViewModel{PortalCode="bbb"});
我想要做的是使用linq获得如下所示的sql语句。
SELECT TOP 100 Id,Name,F.FullPath
FROM Folder F
INNER JOIN (
SELECT 'aaa' AS Code
UNION
SELECT 'bbb'
) AS P ON F.FullPath LIKE 'Root/Portals/' + P.Code + '/%/Settings'
将导致
Id Name FullPath
06D5DA4D Settings Root/Portals/aaa/Version1PRD/Settings
0AF5C112 Settings Root/Portals/bbb/Version1STG/Settings
我无法想象如何编写如上所述的查询,也许这不能写在linq上,但我不确定它是否可以。
答案 0 :(得分:1)
它确实可以用LINQ编写,如下:
var portalCodes = lst.Select(f => f.PortalCode).Distinct();
var folders = dbContext.Folders.Where(f => portalCodes.Any(p => f.FullPath.Contains(p)));