如何选择仅包含特定列的“父级”行和“子行”

时间:2012-02-29 20:03:26

标签: linq linq-to-entities entity-framework-4.1

所以我有两个表的布局像(但没有命名):

Table A
-------
AID
Title
ACol1
ACol2 ... (to ACol60)

Table B
-------
BID
AID
Title
BCol1
BCol2 ... (to BCol30)

我构建了一个简单的类

public class SimpleCollection
{
    public Guid ID { get; set; }
    public string Title { get; set; }
    public IEnumerable<SimpleCollection> Elements { get; set; }
}

我想做的是双重的:

  1. 在一次调用中返回所有父/子行。
  2. 只选择我需要的列,这样我就不会拉出我不需要的60/30额外列。
  3. 我尝试了以下内容:

    var query = from A in dbContext.TableA
                from B in A.TableB
                select new SimpleCollection()
                {
                    ID = A.AID,
                    Title = A.Title,
                    Elements = select new SimpleCollection<string>()
                    {
                        ID = B.BID,
                        Title = B.Title
                    }
                };
    

    但它不喜欢将Elements设置为select语句。

2 个答案:

答案 0 :(得分:1)

var query = from A in dbContext.TableA
            from B in A.TableB
            group B by A into g
            select new SimpleCollection()
            {
                ID = g.Key.AID,
                Title = g.Key.Title,
                Elements = g.Select(x => new SimpleCollection {ID = x.BID, x.Title}).ToList()
            };

答案 1 :(得分:1)

我相信我在想这个问题。

var query = dbContext.TableA
                     .Select(p => new SimpleCollection()
                     {
                       ID = p.AID,
                       Title = p.Title,
                       Elements = p.TableBs
                                   .Select(c => new SimpleCollection()
                                   {
                                     ID = c.BID,
                                     Title = C.Title
                                   }
                     }