1

値を比較しようとしている 2 つのリストがありますが、問題は、一方が typeList<string>で、もう一方が type であることList<SelectListItem>です。

これは私が現在持っているもので、問題なく動作しますが、このような単純な比較チェックには多くのオーバーヘッドがあるように感じます。

List<SelectListItem> fullSubjects = SubRepo.GetSubjects();

//Create our custom list based off the diff
Manage.UserCustomSubjects = Manage.UserSubjects.Where(item => !StaticReferenceList.Contains(item)).ToList();
foreach (var s in Manage.UserCustomSubjects)
{
         var checkval = fullSubjects.FirstOrDefault(t => t.Text == s);
         if (checkval == null)
         {
             var additem = new SelectListItem();
             additem.Text = s;
             additem.Value = s;
             fullSubjects.Add(additem);
         }
}

ここでの全体的な目標はfullSubjects、重複する値のないリストを作成することです。

これをクリーンアップする方法、または比較を LINQify する方法について何か提案はありますか?

4

1 に答える 1

1

これが1つのアプローチです。分かりやすいように分解して残しました。

List<SelectListItem> fullSubjects = SubRepo.GetSubjects();

//Create our custom list based off the diff
Manage.UserCustomSubjects = Manage.UserSubjects.Where(item => !StaticReferenceList.Contains(item)).ToList();

var diff= Manage.UserCustomSubjects.Except(fullSubjects.Select(fs=>fs.Text));
var combined=fullSubjects.Union(diff.Select(d=>new SelectListItem {Text=d,Value=d}));

短縮:

var fullSubjects = SubRepo.GetSubjects().Union(Manage.UserSubjects.Where(item => !StaticReferenceList.Contains(item)).ToList().Except(fullSubjects.Select(fs=>fs.Text)).Select(d=>new SelectListItem {Text=d,Value=d}));
于 2013-05-30T17:33:00.427 に答える