通过Linq2SQL选择分层数据

时间:2011-07-14 16:10:59

标签: c# linq linq-to-sql

现在已经很晚了,我无法看到森林里的树木。

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

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>必须有一个简单的方法,但我看不到一个。

有什么想法吗?

1 个答案:

答案 0 :(得分: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()