LINQ子列表列表

时间:2010-04-01 19:12:13

标签: c# linq

我正在尝试获取所有不从指定类继承的子列表,并且还获取父/根列表类型。我无法弄清楚语法。这是我正在寻找的那种事情的一个例子。感谢您提供任何帮助!

public class Foo
{
  public IList<Type> Bar { get; private set; }
}

List<Foo> test = new List<Foo>();
// Initialize, add values, etc.

var result = from f in test
             from b in f.Bar
             where !b.IsSubclassOf(typeof(AnotherClass))
             select f.GetType(), b

2 个答案:

答案 0 :(得分:1)

也许是这样的:

  var result = test.SelectAll(i => i.Bar).Where(i => !(i is AnotherClass)).Select(i => new { Type = i.GetType(), Item = i});

PS:第3次尝试:)

答案 1 :(得分:0)

这是你要找的吗?

class Foo
{
    public IList<object> Bar { get; set; }
}

...

Foo foo = new Foo();
foo.Bar = new List<object>();
foo.Bar.Add(1);
foo.Bar.Add("a");

Foo foo2 = new Foo();
foo2.Bar = new List<object>();
foo2.Bar.Add(2);
foo2.Bar.Add('b');

List<Foo> foos = new List<Foo>() { foo, foo2 };

var query = from f in foos
            from b in f.Bar
            where !(b is string)
            select new
            {
                InnerObjectType = b.GetType(),
                InnerObject = b
            };

foreach (var obj in query)
    Console.WriteLine("{0}\t{1}", obj.InnerObjectType, obj.InnerObject);

编辑:如果要排除的类型是参数,则可以将where子句修改为

where b.GetType() != type

IEnumarable<T>有一个OfType<>的扩展方法,当您想要将选择限制为给定类型时会很有用,如果有一个排除替代方案(或者如果有的话,我会很好)不知道它)。如果有,你可以在f.Bar上使用它并消除where子句。