想用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));
}