我正在尝试做一些我不确定LINQ可以做的事情 - 但是试试吧! 我有2节课;一个是另一个的列表结构:
public class1 {
public int id {get; set;}
public string title {get; set;}
public List<class2> subcat {get; set;}
}
public class2 {
public int Value {get; set;}
public string Text {get; set;}
}
是否可以用LINQ填充这样的结构?类似的东西:
return (from r in results
from sub in subresults.Where(sub => sub.id == r.subid).DefaultIfEmpty()
select new class1 {
id = r.id,
title = r.title,
subcat = [GET TWO COLUMNS FROM 'SUB' INTO THIS]
}).ToList()
这可能吗?我不想通过使用嵌套循环等手动构建它们 提前谢谢!
答案 0 :(得分:3)
这是你需要的吗?
return (from r in results
select new class1 {
id = r.id,
title = r.title,
subcat = (from sub in subresults
where sub.id == r.subid
select new class2 { Value = sub.Value, Text = sub.Text }).ToList()
}).ToList()
答案 1 :(得分:0)
您可以使用导航属性在一个查询中加载结果和子结果。
from r in results
select new class1 {
id = r.id,
title = r.title,
subcat = r.Subresults.Select(sr =>
new class2 { Value = sr.Value, Text = sr.Text })
...假设导航属性result.Subresults
存在或以其他方式可以创建以方便使用。
AutoMapper在这里也很有用。如果您定义了两个映射(result => class1
,subresult => class2
),它将自动加载嵌套集合。