日期:2014-05-20  浏览次数:20772 次

求大神,只要 linq,不要 foreach
企业(E)有多个产品(P),产品(P)有多个问卷调查(S)。
用 linq 得出 Es 中所有产品和调查的清单,用匿名类表示。

class E {
public string Name { get; set; }
public List<P> Ps { get; set; }
}
class P {
public string Name { get; set; }
public List<S> Ss { get; set; }
public DateTime PublishedDate { get; set; }
}
class S {
public string Name { get; set; }
public DateTime PublishedDate { get; set; }
}
class Program {
static void Main(string[] args) {
var e1p1s1 = new S() { Name = "e1p1s1" };
var e1p1s2 = new S() { Name = "e1p1s2" };
var e1p1s3 = new S() { Name = "e1p1s3" };
var e1p1s4 = new S() { Name = "e1p1s4" };

var e1p2s1 = new S() { Name = "e1p2s1" };
var e1p2s2 = new S() { Name = "e1p2s2" };

var e2p1s1 = new S() { Name = "e2p1s1" };
var e2p1s2 = new S() { Name = "e2p1s2" };
var e2p1s3 = new S() { Name = "e2p1s3" };
var e2p1s4 = new S() { Name = "e2p1s4" };

var e2p2s1 = new S() { Name = "e2p2s1" };
var e2p2s2 = new S() { Name = "e2p2s2" };
var e2p2s3 = new S() { Name = "e2p2s3" };

var e2p3s1 = new S() { Name = "e2p3s1" };
var e2p3s2 = new S() { Name = "e2p3s2" };

var e1p1 = new P() {
Name = "e1p1",
Ss = new List<S>() {
e1p1s1, e1p1s2, e1p1s3, e1p1s4
}
};
var e1p2 = new P() {
Name = "e1p2", Ss = new List<S>() {
e1p2s1, e1p2s2
}
};

var e2p1 = new P() {
Name = "e2p1", Ss = new List<S>() {
e2p1s1, e2p1s2, e2p1s3, e2p1s4
}
};
var e2p2 = new P() {
Name = "e2p2", Ss = new List<S>() {
e2p2s1, e2p2s2, e2p2s3
}
};
var e2p3 = new P() {
Name = "e2p3", Ss = new List<S>() {
e2p3s1, e2p3s2
}
};

var e1 = new E() {
Name = "e1",
Ps = new List<P>() {
e1p1, e1p2
}
};
var e2 = new E() {
Name = "e2",
Ps = new List<P>() {
e2p1, e2p2, e2p3 
}
};

var Es = new List<E>() { e1, e2 };

}
}

Es初始化完成,求神人不用 foreach、ToList().ForEach()完成返回一个IEnumerable<T>,T 为具有如下属性的匿名类型:
Type: 元素的类型,为 P 或 S。