0

このクエリを作成しましたが、最後の date_attribution を見つける方法がわかりません

var usertmp = from user in entity.inv_utilisateur
              join userbadgetmp in entity.inv_utilisateur_badge on user.u_id equals userbadgetmp.u_id into gj
              from userbadge in gj.DefaultIfEmpty()

              select new UserEJ
              {
                  u_id = (int) user.u_id,
                  name = user.name,
                  date_attrib =  userbadge.date_attribution // here I want find the last date
              };

たとえば、この2つのテーブルがある場合:

inv_utilisateur                                inv_utilisateur_badge
u_id          name                               u_id           date_attribution
1             name1                              1              20130911
                                                 1              20130807
2             name2                              2              20120608
3             name3 

結果が必要です

u_id               name             date_attribution
1                  name1            20130911
2                  name2            20120608
3                  name3            

編集 1

フィールドのタイプは次のとおりです: u_id : int、name : 文字列、date_attribution : datetime

4

2 に答える 2

1

私の答えで申し訳ありませんが、私は from 句では使用されていません:

var usertmp = entity.inv_utilisateur
    .Join
    (
        entity.inv_utilisateur_badge,
        x=>x.u_id,
        x=>x.u_id,
        (user,userbadge) => new 
        {
            u_id = user.u_id, 
            name = user.name, 
            date_attrib = userbadge.date_attribution
        }
    )
    .GroupBy(x=>new {x.u_id,x.name})
    .Select
    (
        x => new 
        {
            x.Key.u_id,
            x.Key.name,
            date_attrib = x.Max(z=>z.date_attrib)
        }
    );
于 2013-09-11T15:48:38.183 に答える
1
var usertmp = from user in entity.inv_utilisateur
              join userbadgetmp in entity.inv_utilisateur_badge on user.u_id equals userbadgetmp.u_id into gj
              from userbadge in gj.DefaultIfEmpty()
              group userbadge by new{user.u_id, user.name} into g
              select new UserEJ {
                 u_id = (int)g.Key.u_id,
                 name = g.Key.name,
                 date_attrib = g.Max(x => x!= null ? x.date_attribution : <a defaultvalue>)
              }

あなたもできる

var usertmp = from user in entity.inv_utilisateur
              let max_dt = (from userbadge in entity.inv_utilisateur_badge
                            where user.u_id == userbadge.u_id
                            select userbadge.date_attribution).Max()//??someDefaultvalue if you don't want null
              select new UserEJ {
                 u_id = user.u_id,
                 name = g.name,
                 date_attrib = max_dt
              }
于 2013-09-11T15:58:06.777 に答える