abdul subhan mohammed Ответов: 2

Как преобразовать оператор foreach в LINQ в C#?


Привет ребята,

я хочу преобразовать оператор foreach в LINQ в C#...

у меня есть один список, который называется: CandidateGroups, в этом списке у меня есть еще один список, то есть
канидиателист.

Здесь я выбираю все группы кандидатов, а затем сравниваю их candidategroup.candidatelist.id с током candidiate.ID.

Используя 'foreach', я получил, но я хочу преобразовать этот оператор foreach в LINQ.

Что я уже пробовал:

код

public string GroupNameAR
        {
            get
            {
                string GroupName = "";
                List[CandidateGroupInfo] CandidateGroups = CandidateGroupController.Instance.All;//i have used '[]' instead of '<>', to view code,here.
                foreach(var group in CandidateGroups)
                {
                    foreach (var candidate in group.CandidateList)
                    {
                        if (candidate.ID == ID)
                        {
                            GroupName = group.NameAR;
                        }
                    }
                }
                return GroupName != ""? GroupName.ToUpper() : null;                                               
            }
        }

2 Ответов

Рейтинг:
2

F-ES Sitecore

int ID = 202;
string GroupName = string.Empty;

List<CandidateGroupInfo> CandidateGroups = new List<CandidateGroupInfo> {
    new CandidateGroupInfo{NameAR = "A", CandidateList = new List<CandidateList> { new CandidateList{ID=101}, new CandidateList{ID=102}}},
    new CandidateGroupInfo{NameAR = "B", CandidateList = new List<CandidateList> { new CandidateList{ID=201}, new CandidateList{ID=202}}},
    new CandidateGroupInfo{NameAR = "C", CandidateList = new List<CandidateList> { new CandidateList{ID=301}, new CandidateList{ID=302}}}
    };

foreach(var group in CandidateGroups)
{
    foreach (var candidate in group.CandidateList)
    {
        if (candidate.ID == ID)
        {
            GroupName = group.NameAR;
            // you should add a break as the data is found so no need
            // to continue processing in the loop
            break;
        }
    }
    // again we want to break the outer loop is the data
    // has been found
    if (!string.IsNullOrWhiteSpace(GroupName))
    {
        break;
    }
}
Console.WriteLine(GroupName != ""? GroupName.ToUpper() : null);

// now via Linq

GroupName = string.Empty;

CandidateGroupInfo info = CandidateGroups.FirstOrDefault(cg => cg.CandidateList.Any(cl => cl.ID == ID));

GroupName = info == null ? string.Empty : info.NameAR.ToUpper();


Maciej Los

А как насчет этого ОП заявления: "я хочу преобразовать этот оператор foreach в LINQ"?

F-ES Sitecore

Бит кода после "/ / now via Linq". Спасибо за понижающий голос только потому, что вы не полностью прочитали решение :)

Maciej Los

У тебя нет причин, чтобы быть саркастичным... 3 звезды означают нейтральное голосование. Я далек, очень далек от поспешности в голосовании вниз.

А теперь голосуйте!

F-ES Sitecore

Я программист, и моя работа-быть саркастичным :D

Рейтинг:
2

Karthik_Mahalingam

пробовать

var temp  = CandidateGroups.FirstOrDefault(k => k.CandidateList.Any(a => a.ID == ID));
           GroupName = temp != null ? temp.NameAR.ToUpper() : null;


abdul subhan mohammed

Ошибка: не содержит определения для FirstOrDefault

abdul subhan mohammed

пробовал с find, findAll.. также

Karthik_Mahalingam

добавить это

using System.Linq; 

Maciej Los

Выглядит идеально!