以下查询无法翻译,我无法真正理解为什么这么简单的事情无法完成!
造成这里问题的原因是包含给予。我需要使用 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);
您当前正在尝试使用
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
语句。