webForumDet fria alternativet

List<Department> Find() - bara första "raden" matchas?

.NET

2 svar · 396 visningar · startad av CokeLight

Medlem sedan juni 2000504 inlägg
Frågan#1

Hej,

när jag kör detta:

Department dept = CachedDataSource.GetDepartments(spGetDepartments).Find(p => p.DepartmentID == deptId);

så innehåller p alltid bara första "raden", och eftersom ingen match finns så blir ju dept null. Men i debug läge så returnerar GetDepartments(..) många rader. När jag kör .Find() så trodde jag att den loopade igenom alla rader tills en matchning sker?

Medlem sedan juni 2000504 inlägg
#2

Förmodligen var det nog inget fel på uttrycket ovan. Jag ändrade i koden och körde en vanlig foreach, men av nån konstig anledning blir det fel där. När jag debuggar innehåller dp.DepartmentID 10, 11, 12, 13 osv, men det blir aldrig någon träff, ens när jag hårdkodar: (??) I debug står det också att "DepartmentID" är "string":

foreach (Department dp in CachedDataSource.GetDepartments(spGetDepartments))
{
    if(dp.DepartmentID == "12") //<-- fungerar ej
    //if (dp.DepartmentID == deptId) //<-- fungerar ej
    //if (dp.DepartmentID.Equals(deptId)) //<-- fungerar ej
    //if ("12" == deptId) // <-- fungerar
    //if("12" == "12") // <-- fungerar
    {
        dept = dp;
        break;
    }
}

Department är en "string" och inte "int" som borde vara det mer normala:

Department klassen:

public string DepartmentID
{
    get { return departmentID; }
    set { departmentID = value; }
}

Just nu kommer jag inte på var felet kan ligga...

Medlem sedan juni 2000504 inlägg
#3

Det var nån som efter 5 min efter att jag frågat kom på att dp.DepartmentID = "12 " istället för "12", så det var därför det inte fungerade... :/ jobbigt.. :)

(så nu fungerar .Find(..) som den ska också... den iterarar igenom hela listan)

250 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
118 ms — deklarationer (db)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)