0

このコードを1つのLINQクエリに変換することは可能ですか?以前にこのようなことをしたと誓ったかもしれませんが、そのコードがどこにあるのかわかりません。サブクエリを実行し、あるリストに別のリストの値がある場合は、選択したアイテムの値を変更したいと思います。

var selectInstructors = _instructorService.GetAllNonGuestInstructors()
                                          .Select(i => new SelectListItem()
                                                       {
                                                           Text = i.User.ToFullName(),
                                                           Value = i.Id.ToString() 
                                                       }).ToList();

var selectedItems = schedule.Instructors
                        .Select(instructior1 => selectInstructors.FirstOrDefault(s => s.Value == instructior1.Id.ToString()))
                        .Where(selectedItem => selectedItem != null);

foreach (var selectedItem in selectedItems )
{
    selectInstructors.Remove(selectedItem);
    selectedItem.Selected = true;
    selectInstructors.Add(selectedItem);
}

したがって、リストに次の値があると仮定しましょうselectInstructors:John Smith、1 Jane Doe、2 Dave Ritter、3(永続化されたインストラクターを繰り返す前に、selectedブール値はデフォルトのfalseです)

クラスには、そのschedule.Instructorsスケジュールのインストラクターの永続的なリストがあります:John Smith、1 Dave Ritter、3

さて、私がやりたいのは、値がに等しいSelectedプロパティのいずれかを設定することですselectInstructorsschedule.Instructors

4

2 に答える 2

2
var selectedIds = schedule.Instructors.Select(i => i.Id.ToString()).ToList();    

var instructors = (from instructor in _instructorService.GetAllNonGuestInstructors()
                   let value = instructor.Id.ToString()
                   select new SelectListItem()
                   {
                       Text = instructor.User.ToFullName(),
                       Value = value,
                       Selected = selectedIds.Contains(value)
                   }).ToList();
于 2012-07-28T15:35:38.057 に答える
1
            var allInstructors = _instructorService.GetAllNonGuestInstructors();
        if(allInstructors!=null)
            allInstructors.Select(i =>
                    new SelectListItem() { Text = i.User.ToFullName(), Value = i.Id.ToString() }).
                    Zip(schedule.Instructors,(selectedItems,instructor)=>
                    {var item = selectedItems.FirstOrDefault(s => s.Value == instructior.Id.ToString());
                        if(item!=null)
                            item.Selected=true;});
      //Now use allInstructors collection further it will have Selected true according to your conditions.

selectedItemが削除されてから追加される理由が1つ理解できません。とにかく、これがお役に立てば幸いです。

于 2012-07-28T14:33:07.287 に答える