EF Core 包含无法翻译

问题描述 投票:0回答:1

以下查询无法翻译,我无法真正理解为什么这么简单的事情无法完成!

造成这里问题的原因是包含给予。我需要使用 LoginProvider 和 ProviderKey 的组合来映射到特定用户。

uniqueUsers 只是 EntityUserIdentityProvider 的列表。

 var userProviders = _userLoginRepository.GetAll()
                     .Where(ul => uniqueUsers.Contains(new EntityUserIdentityProvider(ul.LoginProvider, ul.ProviderKey)))
                     .Select(ul => new
                     {
                         Provider = new EntityUserIdentityProvider(ul.LoginProvider, ul.ProviderKey),
                         ul.UserId,
                     }).ToList()
                     .ToDictionary(k => k.Provider, v => v.UserId);
.net entity-framework linq linq-to-sql
1个回答
0
投票

您当前正在尝试使用

Contains
方法来匹配 2 个属性(LoginProvider 和 ProviderKey),实体框架不支持该方法。由于 SQL 的生成方式,它仅适用于 1 个属性。

免责声明:我是Entity Framework Extensions

的所有者

这个库不是免费的,但是 WhereBulkContains 方法正是你想要的:

var userProviders = _userLoginRepository.GetAll()
             .WhereBulkContains(uniqueUsers, ul => new { ul.LoginProvider, ul.ProviderKey })
             //.Where(ul => uniqueUsers.Contains(new EntityUserIdentityProvider(ul.LoginProvider, ul.ProviderKey)))
             .Select(ul => new
             {
                 Provider = new EntityUserIdentityProvider(ul.LoginProvider, ul.ProviderKey),
                 ul.UserId,
             }).ToList()
             .ToDictionary(k => k.Provider, v => v.UserId);

在幕后,如果您想在您这边创建代码以使其在没有我们的库的情况下工作,我们通常会创建一个临时表并使用您的密钥创建一个

JOIN
语句。

© www.soinside.com 2019 - 2024. All rights reserved.