我有此要求,并且效果很好。问题的重点是where filterIds.Contains(tags.UserTagId)
部分。它会查找所有类型为 OR 的标签。因此,如果我有 filterIds 且具有1,2,3值,它将选择具有任何该标签的联系人。
var result = (from conts in _context.Contacts
where conts.CreatorUserId == _userManager.GetUserId(this.User) &&
(from tags in _context.ContactTags
where filterIds.Contains(tags.UserTagId)
select tags.ContactId).Contains(conts.ID)
select new
{
conts.ID, conts.Name, });
我需要找到所有 AND 类型的ContactId。因此,如果联系人包含ID 1、2和3-请给我,就像查找所有具有所有此标签的联系人一样。
from tags in _context.ContactTags
where filterIds[0] == tags.UserTagId
and filterIds[1] == tags.UserTagId
and filterIds[n] == tags.UserTagId
select ...
甚至
(from tags in _context.ContactTags
where filterIds[0] == tags.UserTagId
select ...) where filterIds[1] == tags.UserTagId ...
该怎么做?
答案 0 :(得分:0)
使用Count =)查找解决方案(已修改为Framwork LINQ)
var result = _context.Contacts.Where(conts => conts.CreatorUserId == _userManager.GetUserId(this.User)
&& conts.Tags.Where(t => filterIds.Contains(t.UserTagId)).Count() == filterIds.Count)
.Select(conts=> new...