Linq查询填补复杂模型?

时间:2012-08-10 21:00:20

标签: c# linq

我正在尝试做一些我不确定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()

这可能吗?我不想通过使用嵌套循环等手动构建它们 提前谢谢!

2 个答案:

答案 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 => class1subresult => class2),它将自动加载嵌套集合。