通过Linq2SQL选择分层数据

本文关键字:数据 分层 选择 Linq2SQL 通过 | 更新日期: 2023-09-27 18:02:11

天晚了,只见树木不见森林。

我正在尝试使用以下方法选择分层数据:

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>一定有一条容易的路,但我看不到。

任何想法?

通过Linq2SQL选择分层数据

啊,我知道这是一个简单的问题。在考虑如何在查询中填充EntitySet时,我发现了这个完美的工作解决方案:

如何强制转换IEnumerable或IQueryable到EntitySet?

我想知道为什么ToEntitySet()方法不是语言的一部分。在我看来,如果你想填充分层链接表,这是一个常见的问题。

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

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