2011-07-14 65 views
1

这里很晚,我看不到树林。通过Linq2SQL选择分层数据

我想选择下列方法处理分层数据:

return 
    from line in data 
    group line by line.LieferscheinNr into g 
    let kpf = g.First() 
    select new DESSK1 
    { 
     K1LINK = MakeDfuePartnerID(kpf.Land, kpf.VerbandNr), 
     K1LSNR = kpf.LieferscheinNr, 
     K1LSDT = decimal.Parse(kpf.LieferscheinDatum.ToString("ddMMyyyy")), 
     K1ILNW = kpf.IlnLieferanschrift, 
     K1ILNH = kpf.IlnKunde, 
     K1ILNL = kpf.IlnMandant, 
     K1CPSD = 1, 
     K1ILNB = kpf.IlnKunde, 
     K1VSDT = decimal.Parse(kpf.LieferDatum.ToString("ddMMyyyy")), 
     K1BSTN = kpf.BestellNr, 

     // this is where the compiler complains 
     DESSP2 = from pos in g 
       select new DESSP2 
       { 
        P2LSNR = pos.LieferscheinNr, 
        P2POSN = pos.Pos, 
        P2EAN = pos.EAN, 
        P2LMG = pos.Menge, 
        P2BMG = pos.MengeSoll 
       } 
    }; 

我想你可以看到我想要在这里,但因为DESSP2是System.Data.Link.EntitySet<DESSP2>类型和查询类型的失败IEnumerable<DESSP2>

必须有一个简单的方法从IEnumerable<T>EntitySet<T>但我看不到一个。

任何想法?

回答

0

啊,我知道这很简单。一边想着如何填充查询中的EntitySet的我发现这非常有效的解决方案:

How do you cast an IEnumerable<t> or IQueryable<t> to an EntitySet<t>?

但不知为何,ToEntitySet()方法不是语言的一部分。如果你想填充分层linq表格,看起来像是一个常见的问题。

相关部分现在看起来是这样的:

DESSP2 = (from pos in g 
      select new DESSP2 
      { 
       P2LSNR = pos.LieferscheinNr, 
       P2POSN = pos.Pos, 
       P2EAN = pos.EAN, 
       P2LMG = pos.Menge, 
       P2BMG = pos.MengeSoll 
      }).ToEntitySet()