Junior — Middle
Ինչպես տարբերել IEnumerable-ը և IQueryable-ը և ինչ դեպքերում օգտագործել յուրաքանչյուին?
sobes.tech AI
Պատասխան AI-ից
IEnumerable և IQueryable ինտերֆեյսներ են՝ աշխատելու հավաքածուների հետ, բայց տարբեր վարքագծով և նպատակներով:
-
IEnumerable<T> — օգտագործվում է հիշողության մեջ հավաքածուների անցնելու համար: Դատարկումները տվյալների վրա կատարվում են անմիջապես, և բոլոր LINQ գործողությունները մշակվում են հաճախորդի կողմից (հիշողության մեջ):
-
IQueryable<T> — ընդլայնում է
IEnumerable-ը և թույլ է տալիս կառուցել հարցումներ, որոնք կարող են փոխարկվել արտահայտությունների, օրինակ՝ SQL հարցումների: Հարցման կատարմանը սպասում է մինչև այն անցնելը (հետաձգված կատարմամբ), և գործողությունները կատարվում են տվյալների աղբյուրի կողմում (օր., տվյալների բազա):
Երբ օգտագործել:
IEnumerable— եթե տվյալները արդեն բեռնված են հիշողության մեջ կամ աշխատում եք տեղական հավաքածուներով:IQueryable— եթե անհրաժեշտ է կառուցել հարցում հեռավոր աղբյուրի (ԲԴ) վրա և օպտիմալացնել ընտրությունը՝ իրականացնելով ֆիլտրում և դասավորություն սերվերում:
Օրինակ՝
IQueryable<User> usersQuery = dbContext.Users.Where(u => u.Age > 18);
// Տվյալների բազայի հարցումը ձևավորվում և կատարվում է `usersQuery`-ի անցման ժամանակ
IEnumerable<User> usersList = usersQuery.ToList();
// Տվյալները բեռնվում են հիշողության մեջ, և հաջորդ գործողությունները կատարվում են տեղական մակարդակով