如何使用分组键从链接表中获取值

时间:2017-12-20 11:07:51

标签: jquery linq grouping

我有桌子arAbonamenty和arKlienci。 arAbonamnety中的每个项目都与arKlienci相关联。

请查看下面的代码。使用第一个temp_query我可以看到第二个表(arKlienci)中的值,但是如果我在arAbonamenty中对记录进行分组,我就不能引用arKlienci中的项目

var temp_query = from myAbonamenty in myNexo_ARWALEntities.ArAbonamenty
            where (myAbonamenty.czy_fa_auto_na_początku_miesiąca == true)
            select new
            {
                klientId=myAbonamenty.id_klient,
                klientId_nabywca = myAbonamenty.ArKlienci.Nexo_klient_nabywca,   
                klientId_odbiorca = myAbonamenty.ArKlienci.Nexo_klient_odbiorca
            };



var query = from myAbonamenty in myNexo_ARWALEntities.ArAbonamenty
             where (myAbonamenty.czy_fa_auto_na_początku_miesiąca == true)
             group myAbonamenty by myAbonamenty.id_klient into myAboGrupowane
             select new
             {
                klientId = myAboGrupowane.Key,
                abonament = myAboGrupowane
             };

foreach (var AboGrupowane in query)
{
    Console.WriteLine(AboGrupowane.klientId);
    /// here I want to refer to klientID_nabywca and klientId_odbiorca
    foreach (var myAbonamenty in AboGrupowane.abonament)
    {
        Console.WriteLine(myAbonamenty.Asortymenty.Id);
    }
}

我想参考我已发表评论的这些项目。

2 个答案:

答案 0 :(得分:0)

假设相同的klientId意味着相同的ArKlienci链接,您只需访问其中一个组:

var query = from myAbonamenty in myNexo_ARWALEntities.ArAbonamenty
             where (myAbonamenty.czy_fa_auto_na_początku_miesiąca == true)
             group myAbonamenty by myAbonamenty.id_klient into myAboGrupowane
             let arKlienci = myAboGrupowane.First()
             select new
             {
                klientId = myAboGrupowane.Key,
                abonament = myAboGrupowane,
                klientId_nabywca = arKlienci.Nexo_klient_nabywca,   
                klientId_odbiorca = arKlienci.Nexo_klient_odbiorca                 
            };

我使用let来避免两次调用First

答案 1 :(得分:0)

之前的回答帮助我找到了解决方案:

var query = from myAbonamenty in myNexo_ARWALEntities.ArAbonamenty
             where (myAbonamenty.czy_fa_auto_na_początku_miesiąca == true)
             group myAbonamenty by myAbonamenty.id_klient into myAboGrupowane
             let myAboFirst = myAboGrupowane.FirstOrDefault()
             select new
             {
                klientId = myAboGrupowane.Key,
                klientId_nabywca = myAboFirst.ArKlienci.Nexo_klient_nabywca,
                klientId_odbiorca = myAboFirst.ArKlienci.Nexo_klient_odbiorca,
                abonament = myAboGrupowane
             };

foreach (var AboGrupowane in query)
{
    Console.WriteLine(AboGrupowane.klientId);
    Console.WriteLine(AboGrupowane.klientId_nabywca);
    foreach (var myAbonamenty in AboGrupowane.abonament)
    {
        Console.WriteLine(myAbonamenty.Asortymenty.Id);
    }
}