Iindlela zokwenza imibuzo ye-LINQ kwi-C#.NET

Intshayelelo

Π’ eli nqaku ezinye iindlela zokuphucula zaqwalaselwa LINQ imibuzo.
Apha sikwabonisa ezinye iindlela zokuphucula ikhowudi ezinxulumene nayo LINQ imibuzo.

Kuyaziwa ukuba I-LINQ(UMbuzo oDityanisiweyo loLwimi) lulwimi olulula noluluncedo lokubuza umthombo wedatha.

А LINQ ukuya SQL yitekhnoloji yokufikelela kwidatha kwi-DBMS. Esi sisixhobo esinamandla sokusebenza ngedatha, apho imibuzo yakhiwa ngolwimi oluchazayo, oluya kuthi ke luguqulelwe SQL imibuzo iqonga kwaye ithunyelwe kumncedisi wedatabase ukuze iphunyezwe. Kwimeko yethu, ngeDBMS sithetha Umncedisi weMS SQL.

Nangona kunjalo, LINQ imibuzo aziguqulwa zibe zezibhalwe ngokugqibeleleyo SQL imibuzo, apho i-DBA enamava inokubhala ngawo onke ama-nuances okuphucula SQL imibuzo:

  1. uqhagamshelo olulolona (Joyina) kunye nokucoca iziphumo (KUPHI)
  2. ama-nuances amaninzi ekusebenziseni uqhagamshelwano kunye neemeko zeqela
  3. iinguqu ezininzi ekutshintsheni iimeko IN phezu BABEKHOΠΈ AYINGENA, <> qhubeka BABEKHO
  4. i-caching ephakathi yeziphumo ngokusebenzisa iitheyibhile zexeshana, i-CTE, izinto eziguquguqukayo zetafile
  5. ukusetyenziswa kwesivakalisi (UKHETHO) ngemiyalelo kunye neengcebiso zetafile NA (...)
  6. usebenzisa iimbono ezinesalathiso njengenye yeendlela zokususa ufundo lwedatha olungafunekiyo ngexesha lokukhetha

Eyona ntsilelo iphambili yokusebenza kwesiphumo SQL imibuzo xa uqulunqa LINQ imibuzo zezi:

  1. ukudityaniswa kwayo yonke indlela yokukhetha idatha kwisicelo esinye
  2. ukuphinda-phinda iibhloko ezifanayo zekhowudi, ezikhokelela ekugqibeleni ekufundweni kwedatha eninzi engeyomfuneko
  3. amaqela eemeko zamacandelo amaninzi (okusengqiqweni β€œkunye” kunye β€œokanye”) - AND ΠΈ OR, ukudibanisa kwiimeko ezinzima, kukhokelela kwinto yokuba isilungisi, sinezalathisi ezifanelekileyo ezingadityaniswanga kwimihlaba eyimfuneko, ekugqibeleni iqala ukuskena ngokuchasene nesalathisi esidibeneyo (INDEX SKAN) ngokwamaqela eemeko
  4. ukwenza indlwane enzulu yee-subqueries kwenza ukwahlula kube yingxaki kakhulu Iingxelo zeSQL kunye nohlalutyo lwesicwangciso sombuzo kwicala labaphuhlisi kunye DBA

Iindlela zokuphucula

Ngoku makhe siye ngqo kwiindlela zokulungiselela.

1) Isalathiso esongezelelweyo

Kungcono ukuqwalasela izihluzi kwiitheyibhile eziphambili zokukhetha, kuba rhoqo umbuzo wonke wakhiwe malunga netafile enye okanye ezimbini eziphambili (izicelo-imisebenzi yabantu) kunye neseti esemgangathweni yeemeko (Ivaliwe, Irhoxisiwe, Yenziwe, Ubume). Kubalulekile ukwenza i-indices ezifanelekileyo kwiisampuli ezichongiweyo.

Esi sisombululo siyavakala xa ukhetha le mihlaba inciphisa ngokubonakalayo iseti ebuyisiweyo kumbuzo.

Umzekelo, sinezicelo ezingama-500000. Nangona kunjalo, kukho kuphela izicelo ezisebenzayo ze-2000. Emva koko isalathiso esikhethwe ngokuchanekileyo siyakusisindisa INDEX SKAN kwitafile enkulu kwaye izakuvumela ukuba ukhethe ngokukhawuleza idatha ngesalathiso esingadityaniswanga.

Kwakhona, ukunqongophala kwezalathisi kunokuchongwa ngokweengcebiso zokwahlulahlula izicwangciso zombuzo okanye inkqubo yokuqokelela iinkcukacha-manani zokujonga. Umncedisi weMS SQL:

  1. sys.dm_db_missing_index_groups
  2. sys.dm_db_missing_index_group_stats
  3. sys.dm_db_missing_index_details

Yonke idatha yokujonga iqulethe ulwazi malunga nezalathisi ezingekhoyo, ngaphandle kwezalathisi zendawo.

Nangona kunjalo, izalathisi kunye ne-caching zihlala ziindlela zokulwa neziphumo zokubhalwa kakubi LINQ imibuzo ΠΈ SQL imibuzo.

Njengoko ubomi oburhabaxa bubonisa, kusoloko kubalulekile ukuba ishishini liphumeze iimpawu zeshishini ngamaxesha athile abekiweyo. Kwaye ke, izicelo ezinzima zihlala zigqithiselwa ngasemva nge-caching.

Oku kuthetheleleka ngokuyinxenye, kuba umsebenzisi akasoloko efuna idatha yamva nje kwaye kukho inqanaba elamkelekileyo lokuphendula kujongano lomsebenzisi.

Le ndlela ivumela ukusombulula iimfuno zeshishini, kodwa ekugqibeleni inciphisa ukusebenza kwenkqubo yolwazi ngokulibazisa nje izisombululo kwiingxaki.

Kukwafanelekile ukukhumbula ukuba kwinkqubo yokukhangela izalathisi eziyimfuneko zokongeza, iingcebiso MS SQL ukusebenzela kungachaneka, kubandakanywa phantsi kwezi meko zilandelayo:

  1. ukuba sele kukho izalathisi ezineseti yemihlaba efanayo
  2. ukuba imihlaba ekwitheyibhile ayinakho ukuboniswa ngenxa yothintelo lwesalathiso (ichazwe ngokweenkcukacha ngakumbi apha).

2) Ukudibanisa iimpawu zibe uphawu olunye olutsha

Ngamanye amaxesha amanye amasimi asuka kwitafile enye, esebenza njengesiseko seqela leemeko, anokutshintshwa ngokuzisa intsimi enye entsha.

Oku kuyinyani ngakumbi kwimihlaba yobume, ekholisa ukuba yibit okanye inani elipheleleyo kuhlobo.

Umzekelo:

Ivaliwe = 0 KUNYE Irhoxisiwe = 0 KWAYE Ivuliwe = 0 ithathe indawo ye Ubume = 1.

Apha kulapho uphawu lweNdawo olupheleleyo lwaziswa khona ukuqinisekisa ukuba ezi meko zimi kwitheyibhile. Okulandelayo, olu phawu lutsha luphawulwe.

Esi sisisombululo esisisiseko kwingxaki yokusebenza, kuba Sifikelela kwidatha ngaphandle kokubala okungadingekile.

3) Ukwenziwa kwezinto ezibonakalayo

Ngelishwa ku LINQ imibuzo Iitheyibhile zexeshana, ii-CTEs, kunye neziguquguquko zetafile azinakusetyenziswa ngokuthe ngqo.

Nangona kunjalo, kukho enye indlela yokwandisa le meko - iimboniselo ezinesalathiso.

Iqela lemeko (ukusuka kumzekelo ongasentla) Ivaliwe = 0 KUNYE Irhoxisiwe = 0 KWAYE Ivuliwe = 0 (okanye iseti yezinye iimeko ezifanayo) iba lukhetho olulungileyo lokuzisebenzisa kwimboniselo enesalathiso, igcina indawo encinci yedatha kwiseti enkulu.

Kodwa kukho inani lezithintelo xa ubonisa umbono:

  1. ukusetyenziswa kwesubqueries, amagatya BABEKHO kufuneka itshintshwe ngokusetyenziswa Joyina
  2. awukwazi ukusebenzisa izivakalisi UNION, UManyano BONKE, UKUXELWA, UKUTSHINTSHA
  3. Awukwazi ukusebenzisa iingcebiso zetafile kunye namagatya UKHETHO
  4. akukho nokwenzeka ukuba usebenze ngemijikelo
  5. Akunakwenzeka ukubonisa idatha kwimboniselo enye kwiitafile ezahlukeneyo

Kubalulekile ukukhumbula ukuba inzuzo yokwenyani yokusebenzisa imboniselo enesalathiso inokufezekiswa kuphela ngokuyifakela ngokwenyani.

Kodwa xa ufowunela imboniselo, ezi zalathisi zinokungasetyenziswa, kwaye ukuzisebenzisa ngokucacileyo, kufuneka ucacise KUNYE (NOEXPAND).

Ukusukela nge LINQ imibuzo Akunakwenzeka ukuchaza iingcebiso zetafile, ke kuya kufuneka udale omnye umboniso- "i-wrapper" yale fomu ilandelayo:

CREATE VIEW ИМЯ_прСдставлСния AS SELECT * FROM MAT_VIEW WITH (NOEXPAND);

4) Ukusebenzisa imisebenzi yetafile

Rhoqo kwi LINQ imibuzo Iibhloko ezinkulu ze-subqueries okanye iibhloko ezisebenzisa iimbono ezinesakhiwo esinzima senza umbuzo wokugqibela kunye nesakhiwo sokwenza esinzima kakhulu.

IiNzuzo eziPhambili zokuSebenzisa iMisebenzi yeTheyibhile kwi LINQ imibuzo:

  1. Amandla, njengakwimeko yeemboniselo, oza kusetyenziswa kwaye ucaciswe njengento, kodwa ungadlula iseti yegalelo leparameters:
    UKUSUKA KUMSEBENZI(@param1, @param2 ...)
    Ngenxa yoko, isampula yedatha eguquguqukayo inokufezekiswa
  2. Kwimeko yokusebenzisa umsebenzi wetafile, akukho zithintelo zinamandla njengakwimeko yezimvo ezinesalathiso ezichazwe ngasentla:
    1. Amacebiso kwitheyibhile:
      ngokusebenzisa I-LINQ Awunako ukucacisa ukuba zeziphi izalathi ezifanele ukusetyenziswa kwaye umisele inqanaba lokwahlulwa kwedatha xa ubuza.
      Kodwa umsebenzi unazo ezi zakhono.
      Ngomsebenzi, ungafezekisa isicwangciso sombuzo esisoloko sisenziwa, apho imithetho yokusebenza ngezalathiso kunye namanqanaba okwahlulwa kwedatha ichazwa.
    2. Ukusebenzisa umsebenzi kuvumela, xa kuthelekiswa neemboniselo ezinesalathiso, ukufumana:
      • ingqiqo yesampulu yedatha entsonkothileyo (nokusebenzisa iilophu)
      • ukulanda idatha kwiitafile ezininzi ezahlukeneyo
      • se benzisa UNION ΠΈ BABEKHO

  3. Ukunikela UKHETHO iluncedo kakhulu xa sifuna ukunika ulawulo concurrency UKHETHO(MAXDOP N), ulandelelwano lwesicwangciso sokwenziwa kombuzo. Umzekelo:
    • ungakhankanya ukwenziwa kwakhona ngenkani kwesicwangciso sombuzo UKHETHO (RECOMPILE)
    • ungakhankanya nokuba unyanzelise isicwangciso sombuzo ukusebenzisa ulungelelwaniso lokudibanisa olukhankanyiweyo kumbuzo UKHETHO (KUNYANZELEKILE UKUYALELO)

    Iinkcukacha ezithe vetshe malunga UKHETHO ichazwe apha.

  4. Ukusebenzisa esona silayidi sedatha esimxinwa nesona sifunekayo:
    Akukho mfuneko yokugcina iiseti zedatha enkulu kwi-cache (njengoko kunjalo ngeemboniselo ezinesalathisi), apho usadinga ukucoca idatha ngeparameter.
    Umzekelo, kukho itafile enecebo lokucoca KUPHI iindawo ezintathu zisetyenziswa (a, b, c).

    Ngokwesiqhelo, zonke izicelo zinemeko eqhubekayo a = 0 kunye b = 0.

    Nangona kunjalo, isicelo sentsimi c iyaguquguquka ngakumbi.

    Vumela imeko a = 0 kunye b = 0 Isinceda ngokwenene ukuba sinciphise iziphumo ezifunekayo ezisetiweyo kumawaka eerekhodi, kodwa imeko ikwimeko с icutha ukhetho phantsi kwiirekhodi ezilikhulu.

    Apha umsebenzi wetafile unokuba lukhetho olungcono.

    Kwakhona, umsebenzi wetafile unokuqikelelwa ngakumbi kwaye uyahambelana ngexesha lokwenziwa.

U mzekelo

Makhe sijonge ukuphunyezwa komzekelo kusetyenziswa uvimba weenkcukacha weMibuzo njengomzekelo.

Kukho isicelo KHETHANONE BABEKHO) ukuya β€œkwimibuzo eSebenzayo”:

Isicelo seNombolo yoku-1

(@p__linq__0 nvarchar(4000))SELECT
1 AS [C1],
[Extent1].[Id] AS [Id],
[Join2].[Object_Id] AS [Object_Id],
[Join2].[ObjectType_Id] AS [ObjectType_Id],
[Join2].[Name] AS [Name],
[Join2].[ExternalId] AS [ExternalId]
FROM [dbo].[Questions] AS [Extent1]
INNER JOIN (SELECT [Extent2].[Object_Id] AS [Object_Id],
[Extent2].[Question_Id] AS [Question_Id], [Extent3].[ExternalId] AS [ExternalId],
[Extent3].[ObjectType_Id] AS [ObjectType_Id], [Extent4].[Name] AS [Name]
FROM [dbo].[ObjectQuestions] AS [Extent2]
INNER JOIN [dbo].[Objects] AS [Extent3] ON [Extent2].[Object_Id] = [Extent3].[Id]
LEFT OUTER JOIN [dbo].[ObjectTypes] AS [Extent4] 
ON [Extent3].[ObjectType_Id] = [Extent4].[Id] ) AS [Join2] 
ON [Extent1].[Id] = [Join2].[Question_Id]
WHERE ([Extent1].[AnswerId] IS NULL) AND (0 = [Extent1].[Exp]) AND ( EXISTS (SELECT
1 AS [C1]
FROM [dbo].[OperativeQuestions] AS [Extent5]
WHERE (([Extent5].[Email] = @p__linq__0) OR (([Extent5].[Email] IS NULL) 
AND (@p__linq__0 IS NULL))) AND ([Extent5].[Id] = [Extent1].[Id])
));

Imboniselo inesakhiwo esintsonkothileyo kakhulu: ine-subquery edibanisa kwaye isebenzisa ukuhlelwa DISTINCT, oluthi ngokubanzi lusebenze ngokufanelekileyo kwizibonelelo.

Isampulu evela kwi-OperativeQuestions imalunga neerekhodi ezingamawaka alishumi.

Eyona ngxaki iphambili ngalo mbuzo kukuba kwiirekhodi ezisuka kumbuzo wangaphandle, i subquery yangaphakathi iphunyezwa kwi [Imibuzo Yokusebenza] imboniselo, efanele [i-imeyile] = @p__linq__0 isivumele ukuba sinciphise ukhetho lwemveliso (nge BABEKHO) ukuya kuthi ga kumakhulu eerekhodi.

Kwaye kunokubonakala ngathi i-subquery kufuneka ibale iirekhodi kanye nge [Email] = @p__linq__0, kwaye ke ezi zibini zeerekhodi ezilikhulu kufuneka ziqhagamshelwe nge-Id ngeMibuzo, kwaye umbuzo uya kukhawuleza.

Enyanisweni, kukho uxhulumaniso olulandelelanayo lwazo zonke iitafile: ukujonga imbalelwano yeMibuzo ye-Id nge-Id evela kwiMibuzo eSebenzayo, kunye nokucoca nge-imeyile.

Enyanisweni, isicelo sisebenza nawo onke amashumi amawaka eerekhodi zeMibuzo yokuSebenza, kodwa kuphela idatha yomdla efunekayo nge-imeyile.

Imibuzo esebenzayo jonga umbhalo:

Isicelo seNombolo yoku-2

 
CREATE VIEW [dbo].[OperativeQuestions]
AS
SELECT DISTINCT Q.Id, USR.email AS Email
FROM            [dbo].Questions AS Q INNER JOIN
                         [dbo].ProcessUserAccesses AS BPU ON BPU.ProcessId = CQ.Process_Id 
OUTER APPLY
                     (SELECT   1 AS HasNoObjects
                      WHERE   NOT EXISTS
                                    (SELECT   1
                                     FROM     [dbo].ObjectUserAccesses AS BOU
                                     WHERE   BOU.ProcessUserAccessId = BPU.[Id] AND BOU.[To] IS NULL)
) AS BO INNER JOIN
                         [dbo].Users AS USR ON USR.Id = BPU.UserId
WHERE        CQ.[Exp] = 0 AND CQ.AnswerId IS NULL AND BPU.[To] IS NULL 
AND (BO.HasNoObjects = 1 OR
              EXISTS (SELECT   1
                           FROM   [dbo].ObjectUserAccesses AS BOU INNER JOIN
                                      [dbo].ObjectQuestions AS QBO 
                                                  ON QBO.[Object_Id] =BOU.ObjectId
                               WHERE  BOU.ProcessUserAccessId = BPU.Id 
                               AND BOU.[To] IS NULL AND QBO.Question_Id = CQ.Id));

Imboniselo yokuqala yemephu kwiDbContext (EF Core 2)

public class QuestionsDbContext : DbContext
{
    //...
    public DbQuery<OperativeQuestion> OperativeQuestions { get; set; }
    //...
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Query<OperativeQuestion>().ToView("OperativeQuestions");
    }
}

Umbuzo wokuqala weLINQ

var businessObjectsData = await context
    .OperativeQuestions
    .Where(x => x.Email == Email)
    .Include(x => x.Question)
    .Select(x => x.Question)
    .SelectMany(x => x.ObjectQuestions,
                (x, bo) => new
                {
                    Id = x.Id,
                    ObjectId = bo.Object.Id,
                    ObjectTypeId = bo.Object.ObjectType.Id,
                    ObjectTypeName = bo.Object.ObjectType.Name,
                    ObjectExternalId = bo.Object.ExternalId
                })
    .ToListAsync();

Kulo mzekelo, siqwalasela isisombululo kule ngxaki ngaphandle kotshintsho lweziseko, ngaphandle kokwazisa itheyibhile eyahlukileyo kunye neziphumo esele zenziwe ("Imibuzo eSebenzayo"), eya kufuna indlela yokuyizalisa ngedatha kunye nokuyigcina ihlaziyiwe. .

Nangona esi sisisombululo esihle, kukho enye inketho yokwandisa le ngxaki.

Eyona njongo iphambili kukugcina i-cache yamangeniso nge- [Email] = @p__linq__0 ukusuka kwi-OperativeQuestions view.

Yazisa umsebenzi wetafile [dbo].[OperativeQuestionsUserMail] kuvimba weenkcukacha.

Ngokuthumela i-imeyile njengepharamitha yegalelo, sifumana umva itheyibhile yamaxabiso:

Isicelo seNombolo yoku-3


CREATE FUNCTION [dbo].[OperativeQuestionsUserMail]
(
    @Email  nvarchar(4000)
)
RETURNS
@tbl TABLE
(
    [Id]           uniqueidentifier,
    [Email]      nvarchar(4000)
)
AS
BEGIN
        INSERT INTO @tbl ([Id], [Email])
        SELECT Id, @Email
        FROM [OperativeQuestions]  AS [x] WHERE [x].[Email] = @Email;
     
    RETURN;
END

Oku kubuyisela itafile yamaxabiso kunye nolwakhiwo lwedatha oluchazwe kwangaphambili.

Ukuze imibuzo kwi-OperativeQuestionsUserMail ibe yeyona ilungileyo kwaye ibe nezicwangciso zokubuza ezona zilungileyo, ulwakhiwo olungqongqo luyafuneka, hayi. IBUYISA ITABILE NJENGOKUBUYELA...

Kule meko, umbuzo ofunekayo 1 uguqulwa ube ngumbuzo 4:

Isicelo seNombolo yoku-4

(@p__linq__0 nvarchar(4000))SELECT
1 AS [C1],
[Extent1].[Id] AS [Id],
[Join2].[Object_Id] AS [Object_Id],
[Join2].[ObjectType_Id] AS [ObjectType_Id],
[Join2].[Name] AS [Name],
[Join2].[ExternalId] AS [ExternalId]
FROM (
    SELECT Id, Email FROM [dbo].[OperativeQuestionsUserMail] (@p__linq__0)
) AS [Extent0]
INNER JOIN [dbo].[Questions] AS [Extent1] ON([Extent0].Id=[Extent1].Id)
INNER JOIN (SELECT [Extent2].[Object_Id] AS [Object_Id], [Extent2].[Question_Id] AS [Question_Id], [Extent3].[ExternalId] AS [ExternalId], [Extent3].[ObjectType_Id] AS [ObjectType_Id], [Extent4].[Name] AS [Name]
FROM [dbo].[ObjectQuestions] AS [Extent2]
INNER JOIN [dbo].[Objects] AS [Extent3] ON [Extent2].[Object_Id] = [Extent3].[Id]
LEFT OUTER JOIN [dbo].[ObjectTypes] AS [Extent4] 
ON [Extent3].[ObjectType_Id] = [Extent4].[Id] ) AS [Join2] 
ON [Extent1].[Id] = [Join2].[Question_Id]
WHERE ([Extent1].[AnswerId] IS NULL) AND (0 = [Extent1].[Exp]);

Iimbono zemephu kunye nemisebenzi kwiDbContext (EF Core 2)

public class QuestionsDbContext : DbContext
{
    //...
    public DbQuery<OperativeQuestion> OperativeQuestions { get; set; }
    //...
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Query<OperativeQuestion>().ToView("OperativeQuestions");
    }
}
 
public static class FromSqlQueries
{
    public static IQueryable<OperativeQuestion> GetByUserEmail(this DbQuery<OperativeQuestion> source, string Email)
        => source.FromSql($"SELECT Id, Email FROM [dbo].[OperativeQuestionsUserMail] ({Email})");
}

Umbuzo wokugqibela weLINQ

var businessObjectsData = await context
    .OperativeQuestions
    .GetByUserEmail(Email)
    .Include(x => x.Question)
    .Select(x => x.Question)
    .SelectMany(x => x.ObjectQuestions,
                (x, bo) => new
                {
                    Id = x.Id,
                    ObjectId = bo.Object.Id,
                    ObjectTypeId = bo.Object.ObjectType.Id,
                    ObjectTypeName = bo.Object.ObjectType.Name,
                    ObjectExternalId = bo.Object.ExternalId
                })
    .ToListAsync();

Umyalelo wexesha lokubulawa uye wehla ukusuka kwi-200-800 ms, ukuya kwi-2-20 ms, njl., oko kukuthi amaxesha alishumi ngokukhawuleza.

Ukuba siyithatha ngokwe-avareji ngaphezulu, endaweni ka-350 ms sifumene u-8 ms.

Ukusuka kwiinzuzo ezicacileyo sikwafumana:

  1. ukunciphisa ngokubanzi umthwalo wokufunda,
  2. ukunciphisa okubalulekileyo kumathuba okuthintela
  3. ukunciphisa umyinge wexesha lokuvalela kumaxabiso amkelekileyo

isiphelo

Ukuphucula kunye nokulungiswa kakuhle kweefowuni zedatabase MS SQL ngokusebenzisa I-LINQ yingxaki enokusonjululwa.

Ukunikela ingqalelo kunye nokuhambelana kubaluleke kakhulu kulo msebenzi.

Ekuqaleni kwenkqubo:

  1. Kuyimfuneko ukujonga idatha esisebenza ngayo isicelo (amaxabiso, iindidi zedatha ezikhethiweyo)
  2. yenza isalathisi esifanelekileyo sale datha
  3. jonga ukuchaneka kweemeko zokudibanisa phakathi kweetafile

Ukuphindaphinda okulandelayo kokuphucula kutyhila:

  1. isiseko sesicelo kwaye ichaza isihluzo esingundoqo sesicelo
  2. ukuphinda iibhloko zemibuzo efanayo kunye nokuhlalutya ukuhlangana kweemeko
  3. kwi-SSMS okanye enye i-GUI ye SQL Server iyazenzela Umbuzo weSQL (ukwabiwa kogcino lwedatha oluphakathi, ukwakha umbuzo onesiphumo usebenzisa olu gcino (kunokubakho eziliqela))
  4. kwinqanaba lokugqibela, ukuthatha njengesiseko isiphumo Umbuzo weSQL, isakhiwo siyakhiwa kwakhona Umbuzo weLINQ

Isiphumo Umbuzo weLINQ kufuneka zifane kulwakhiwo nelona lichongiweyo liphezulu Umbuzo weSQL ukusuka kwinqaku lesi-3.

Imibulelo

Enkosi kakhulu koogxa jobgemws ΠΈ alex_ozr ukusuka kwinkampani Fortis ukufumana uncedo ekulungiseleleni lo mbandela.

umthombo: www.habr.com

Yongeza izimvo