Entity Framework根据集合查询过滤

Entity Framework query and filter according to a collection

我需要一个非常简单的查询,可以很容易地用 sql 编写,但我无法使用 Entity Framework.

编写它

要求: 我有一个文件夹 table,我需要获取 "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 上写,但我不确定它是否可以。

确实可以用LINQ来写,如下:

var portalCodes = lst.Select(f => f.PortalCode).Distinct();
var folders = dbContext.Folders.Where(f => portalCodes.Any(p => f.FullPath.Contains(p)));