1

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

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

4

2 回答 2

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()
于 2012-08-10T21:05:02.610 回答
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),它将自动加载嵌套集合。

于 2012-08-10T21:19:14.107 回答