日期:2014-05-20  浏览次数:20741 次

想用linq实现这样的功能,请高手出谋划策哈~~.
我现在有一张表,上面每一行是一个ID,和ID的一种分类:Tag,每个ID可能会有很多个Tag,所以可能出现在很多行。现在希望查询到既拥有Tag1,Tag2,Tag3...TagN的favorID集合,如果是只有两个ID的话,用一次inner join就可以了。就像:
Select row1 from table 
Select row2 from talbe
where row1.Tag == Tag1 && row2.Tag == Tag2 && row1.ID == row2.ID 
select row;

以上是两个tag的情况,如果是三个tag得这样:
Select row1 from table 
Select row2 from talbe
Select row3 from talbe
where row1.Tag == Tag1 && row2.Tag == Tag2 && row3.Tag == Tag3 && row1.ID == row2.ID && row2.ID == row3.ID 
select row;

所以tag的数目是变量,这个linq语句也会不同,不知道有什么办法可以处理,主要是不太了解linq语句的一些语法特性。


------解决方案--------------------
先分组再判断就可以了

C# code

var infos = new List<Info> { new Info {ID = 1, Tag = "aa" },
                              new Info {ID = 1, Tag = "bb" },
                              new Info {ID = 1, Tag = "cc" }, 
                              new Info {ID = 2, Tag = "aa" }
            };

            var selectedInfos = from info in infos
                          group info.Tag by info.ID into tags
                          select new { ID = tags.Key, tags };

            var needTags = new string[] { "aa" };
            
            foreach (var item in needTags)
            {
                selectedInfos = selectedInfos.Where(i => i.tags.Contains(item));
            }