Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq to sql 递归选择相似对象(LINQ)_Linq To Sql - Fatal编程技术网

Linq to sql 递归选择相似对象(LINQ)

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

我有一些类似对象的情况-基本上,每个对象都实现一个基类型的集合。所以

项目1 -列出项目2 -列出项目3

公共列表特殊项{get;set;}

项目2:项目1 项目3:项目1

特别的 { 公共int值{get;set;} 公共字符串名称{get;set;} }

现在,我可以沿着树往下看,得到一些东西——但我基本上想把整个对象的所有“特殊”类的组成部分,一直到树的下面——都放到一个集合中


这对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; }
}