Linq to sql 递归选择相似对象(LINQ)
我有一些类似对象的情况-基本上,每个对象都实现一个基类型的集合。所以 项目1 -列出项目2 -列出项目3 公共列表特殊项{get;set;} 项目2:项目1 项目3:项目1 特别的 { 公共int值{get;set;} 公共字符串名称{get;set;} } 现在,我可以沿着树往下看,得到一些东西——但我基本上想把整个对象的所有“特殊”类的组成部分,一直到树的下面——都放到一个集合中Linq to sql 递归选择相似对象(LINQ),linq-to-sql,Linq To Sql,我有一些类似对象的情况-基本上,每个对象都实现一个基类型的集合。所以 项目1 -列出项目2 -列出项目3 公共列表特殊项{get;set;} 项目2:项目1 项目3:项目1 特别的 { 公共int值{get;set;} 公共字符串名称{get;set;} } 现在,我可以沿着树往下看,得到一些东西——但我基本上想把整个对象的所有“特殊”类的组成部分,一直到树的下面——都放到一个集合中 这对LINQ有可能吗?还是我必须依靠非常复杂的循环 您可以将Linq与递归函数结合使用: static IEnu
这对LINQ有可能吗?还是我必须依靠非常复杂的循环 您可以将Linq与递归函数结合使用:
static IEnumerable<Special> getSpecials(Item1 item1)
{
var item2Specials = item1.Items2.SelectMany(item2 => getSpecials(item2));
var item3Specials = item1.Items3.SelectMany(item3 => getSpecials(item3));
return item1.Specials.Concat(item2Specials).Concat(item3Specials);
}
静态IEnumerable getSpecials(Item1 Item1)
{
var item2Specials=item1.Items2.SelectMany(item2=>getSpecials(item2));
var item3Specials=item1.Items3.SelectMany(item3=>getSpecials(item3));
返回项目1.Specials.Concat(项目2特殊)。Concat(项目3特殊);
}
对我来说,理解你的课堂结构符号有点困难。我假设你指的是以下C类:
类项目1
{
公共列表项2=新列表();
公共列表项3=新列表();
公共列表特殊项=新列表();
}
类Item2:Item1{}
类Item3:Item1{}
特别班
{
公共int值{get;set;}
公共字符串名称{get;set;}
}
我还假设您的意思是Linq到对象,而不是Linq到SQL。如果您想将其存档数据存储在数据库中,则不应这样做,而应查看。您将其标记为Linq to SQL,但您的问题中没有提到数据库,只提到对象。你是说Linq对物体?你是对的,我没有澄清这一点。它只是Linq到对象-使用C#。@Mark Byers+1。回答得很好。
class Item1
{
public List<Item2> Items2 = new List<Item2>();
public List<Item3> Items3 = new List<Item3>();
public List<Special> Specials = new List<Special>();
}
class Item2 : Item1 { }
class Item3 : Item1 { }
class Special
{
public int Value { get; set; }
public string Name { get; set; }
}