Sobes.tech
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();
// Տվյալները բեռնվում են հիշողության մեջ, և հաջորդ գործողությունները կատարվում են տեղական մակարդակով