求一个简单的LINQ语句

IDictionary<int, IList<int>> secondlevel = new Dictionary<int, IList<int>>();
IDictionary<int, IList<int>> thirdlevel = new Dictionary<int, IList<int>>();
 secondlevel.Add(1, new List<int>(new int[] { 1, 2 }));
 secondlevel.Add(2, new List<int>(new int[] { 3 }));
 secondlevel.Add(3, new List<int>(new int[] { 4, 5, 6 }));
 thirdlevel.Add(1, new List<int>(new int[] { 5, 6, 7, 8, 20, 13, 24 }));
 thirdlevel.Add(2, new List<int>(new int[] { 23 }));
 thirdlevel.Add(3, new List<int>(new int[] { 22, 25, 26, 27 }));
 thirdlevel.Add(4, new List<int>(new int[] { 19, 28, 29, 30, 31, 38, 33 }));
 thirdlevel.Add(5, new List<int>(new int[] { 32, 35 }));
 thirdlevel.Add(6, new List<int>(new int[] { 34, 36, 37 }));

定义了两个目录,二级目录的值是三级目录的键,现在给定thirdlevel中的一个值,得到它所在分支是第几个,比如5结果是0,6结果是1,23结果7,22结果是0,25的结果是1,19是0,28是1,怎么写啊,谢谢!

泛舟湖上清波郎朗
浏览 414回答 14
14回答

一只斗牛犬

int GetItemIndex(int index, IDictionary<int, IList<int>> t) { var result = from x in t where x.Value.Contains(index) select x.Value.IndexOf(index); if (result == null || result.Count() < 1) return -1; return result.FirstOrDefault(); } 这个其实真不用那么复杂

胡子哥哥

没明白你的意思。描述清除点。什么分支什么结果,二级与三级有事什么关系。

慕的地6264312

二级其实就是对三级进行分类啊,仔细看,二级的值是三级的键

海绵宝宝撒

@happydaily: 这个明白了,那你的什么值得到什么分支的第几个是什么意思?没看懂。

凤凰求蛊

@笨笨蜗牛: 分支根据二级目录来的,二级目录共有三个分支,1下面到三级目录的值有5, 6, 7, 8, 20, 13, 24和23;     2下面有22, 25, 26, 27;   3下面有19, 28, 29, 30, 31, 38, 33和 32, 35和 34, 36, 37, 这样分成三组数据,给定一个值,求所在分组的index

烙印99

@happydaily: 刚写了下,太复杂了。 下面的代码是分条写的: int value = 3; var k = from c in thirdlevel where c.Value.Contains(value) select new { k = c.Key, index = c.Value.IndexOf(value) }; var r = k.SingleOrDefault() ?? new { k = 0, index = 0 }; var m = (from c in secondlevel where c.Value.Contains(r.k) select c.Value).Single(); var n = m.Where(o => m.IndexOf(o) < m.IndexOf(r.k)).Sum(o => thirdlevel[o].Count); var index = n + r.index; 如果要写在一起也不是不可以,但那个编写过程很头痛,而且理解起来也会很难。

慕姐8265434

@笨笨蜗牛: 这个是另外一个版本的,整合到了一起,不过中间还是有几个地方感觉没简化好,需要再斟酌,可惜没那感觉了。 var q = from c in thirdlevel from d in secondlevel where c.Value.Contains(value) && d.Value.Contains(c.Key) select c.Value.IndexOf(value) + d.Value .Where(o=>d.Value.IndexOf(o) < d.Value.IndexOf(c.Key)) .Sum(o=>thirdlevel[o].Count); var index = q.Single();

开满天机

    int i=5;            var second = from m in secondlevel                         where m.Value.Contains((from n in thirdlevel                                                 where n.Value.Contains(i)                                                 select n).FirstOrDefault().Key)                         select m;

慕沐林林

@happydaily: 是哦。我不知道你要什麽哦。不是要2的嗎

阿晨1998

int i = 5; var second = from m in secondlevel let s=m.Value.IndexOf((from n in thirdlevel where n.Value.Contains(i) select n).FirstOrDefault().Key) where m.Value.Contains((from n in thirdlevel where n.Value.Contains(i) select n).FirstOrDefault().Key) select s;   @無限遐想: 
打开App,查看更多内容
随时随地看视频慕课网APP