如何在LINQ上创建乘法WHERE(并进行比较)?

时间:2018-09-21 08:27:03

标签: c# sql .net linq

我有此要求,并且效果很好。问题的重点是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 ...

该怎么做?

1 个答案:

答案 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...