2

タイトルが問題をうまく説明しているかわからないので、ここにコードを示します。グリッドをバインドする匿名オブジェクトを返したいです。そのグリッドで、ユーザー名をフルネームに変更したいのですが、フルネームがユーザー名と一致する場合に限ります。以下のクエリでは、CreatedUsername が userModels に存在する場合に CreatedFullname を取得します。存在しない場合、レコードはまったく取得されません。私が望んでいるのは、レコードを取得することです。userModels で利用できる場合は UserFullname を表示し、そうでない場合は x.CreatedUsername を返したいと考えています。

var inf = (from ev in db.Events
       where (ev.StartDate >= beginDate && ev.StartDate <= endDate)
       orderby ev.StartDate descending
       select new
       {
           EventID = ev.EventID,
           EventTitle = ev.Title,
           EventDate = ev.StartDate,
           StudentCount = ev.EventStudents.Count(),
           CreatedUsername = ev.CreatedUsername
           }).AsEnumerable().Select(x => new {EventID = x.EventID,
                                    EventTitle = x.EventTitle,
                                    EventDate = x.EventDate,
                                    StudentCount = x.StudentCount,
                                    CreatedUsername = x.CreatedUsername,
                                    CreatedFullname = 
                                      userModels.Where(u => u.Username == x.CreatedUsername).FirstOrDefault().UserFullName
            });

userModels は、Username、UserFullname、Department などを持つカスタム オブジェクトです。これは、beginDate と endDate に基づいて、ページロード時に ActiveDirectory から収集されました。

4

1 に答える 1

1

あなたはこれを行うことができます:

CreatedFullname = 
    userModels.Where(u => u.Username == x.CreatedUsername)
              .Select(x => x.UserFullName)
              .FirstOrDefault() ?? x.CreatedUsername

またはこれ:

var inf = 
    (from x in
        (from ev in db.Events
         where (ev.StartDate >= beginDate && ev.StartDate <= endDate)
         orderby ev.StartDate descending
         select new
         {
             EventID = ev.EventID,
             EventTitle = ev.Title,
             EventDate = ev.StartDate,
             StudentCount = ev.EventStudents.Count(),
             CreatedUsername = ev.CreatedUsername
         })
         .AsEnumerable()
     let model = userModels.FirstOrDefault(u => u.Username == x.CreatedUsername)
     select new 
     {
         EventID = x.EventID,
         EventTitle = x.EventTitle,
         EventDate = x.EventDate,
         StudentCount = x.StudentCount,
         CreatedUsername = x.CreatedUsername,
         CreatedFullname = (model != null)
             ? x.modelUserFullName 
             : x.CreatedUsername
     });
于 2013-06-07T00:35:36.227 に答える