Izindlela zokuthuthukisa imibuzo ye-LINQ ku-C#.NET

Isingeniso

В lesi sihloko ezinye izindlela zokuthuthukisa zacatshangelwa Imibuzo ye-LINQ.
Lapha siphinde sethule ezinye izindlela zokuthuthukisa amakhodi ezihlobene Imibuzo ye-LINQ.

Kuyaziwa ukuthi I-LINQ(Umbuzo Odidiyelwe Wolimi) iwulimi olulula futhi olulungele ukubuza umthombo wedatha.

А LINQ kuya ku-SQL ubuchwepheshe bokufinyelela idatha ku-DBMS. Leli ithuluzi elinamandla lokusebenza ngedatha, lapho imibuzo yakhiwa ngolimi olumemezelayo, oluzoguqulelwa ku Imibuzo ye-SQL platform futhi ithunyelwe kuseva yedathabheyisi ukuze isetshenziswe. Esimweni sethu, nge-DBMS sisho Iseva yeMS SQL.

Nokho, Imibuzo ye-LINQ aziguqulwa zibe ezibhalwe ngokufanele Imibuzo ye-SQL, i-DBA enolwazi engabhala ngawo wonke ama-nuances wokwenza kahle Imibuzo ye-SQL:

  1. ukuxhumana okuhle (JOIN) nokuhlunga imiphumela (LAPHO)
  2. ama-nuances amaningi ekusebenziseni ukuxhumana nezimo zeqembu
  3. ukuhlukahluka okuningi ekushintsheni izimo IN on BUKHONAи AKUNGENA, <> ku BUKHONA
  4. ukulondoloza okwesikhashana kwemiphumela ngamathebula esikhashana, i-CTE, okuguquguqukayo kwetafula
  5. ukusetshenziswa komusho (OPTION) ngeziqondiso namacebiso ethebula KANYE (...)
  6. usebenzisa ukubukwa okunezikhombo njengenye yezindlela zokususa ukufundwa kwedatha okungafuneki ngesikhathi sokukhetha

Izinkinga zokusebenza eziyinhloko zomphumela Imibuzo ye-SQL lapho kuhlanganiswa Imibuzo ye-LINQ yilezi:

  1. ukuhlanganiswa kwayo yonke indlela yokukhetha idatha esicelweni esisodwa
  2. ukuphindaphinda amabhlogo afanayo ekhodi, okuholela ekugcineni ekufundweni kwedatha eminingi engadingekile
  3. amaqembu emibandela yezingxenye eziningi (okunengqondo “futhi” kanye “noma”) - FUTHI и OR, ukuhlanganisa ezimweni eziyinkimbinkimbi, kuholela eqinisweni lokuthi i-optimizer, enezinkomba ezifanelekile ezingahlanganisiwe zezinkambu ezidingekayo, ekugcineni iqala ukuskena ngokumelene nenkomba ehlanganisiwe (INDEX SCAN) ngamaqembu ezimo
  4. ukucwiliswa okujulile kwama-subqueries kwenza ukuhlukanisa kube yinkinga kakhulu Izitatimende ze-SQL kanye nokuhlaziywa kohlelo lwemibuzo ngasohlangothini lwabathuthukisi kanye DBA

Izindlela zokuthuthukisa

Manje ake siye ngqo ezindleleni zokuthuthukisa.

1) Ukufakwa ohlwini okungeziwe

Kungcono ukucabangela izihlungi kumathebula amakhulu okukhetha, njengoba ngokuvamile wonke umbuzo wakhelwe eduze kwetafula elilodwa noma amabili amakhulu (izinhlelo zokusebenza-ukusebenza kwabantu) kanye nesethi yemibandela evamile (Ivaliwe, Ikhanseliwe, Inikwe amandla, Isimo). Kubalulekile ukwenza izinkomba ezifanele zamasampula akhonjiwe.

Lesi sixazululo sinengqondo lapho kukhethwa lezi zinkambu kunciphisa kakhulu isethi ebuyisiwe embuzweni.

Isibonelo, sinezicelo ezingu-500000. Nokho, kunezinhlelo zokusebenza ezisebenzayo ezingu-2000 kuphela. Khona-ke inkomba ekhethwe kahle izosisindisa kuyo INDEX SCAN etafuleni elikhulu futhi kuzokuvumela ukuthi ukhethe ngokushesha idatha ngokusebenzisa inkomba engahlanganisiwe.

Futhi, ukuntuleka kwezinkomba kungabonakala ngokusebenzisa ukwaziswa kokuhlaziya izinhlelo zemibuzo noma ukuqoqa izibalo zokubuka zesistimu. Iseva yeMS 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 yokubuka iqukethe ulwazi mayelana nezinkomba ezingekho, ngaphandle kwezinkomba zendawo.

Kodwa-ke, izinkomba kanye nokugcinwa kwesikhashana ngokuvamile kuyizindlela zokulwa nemiphumela yokubhala kabi Imibuzo ye-LINQ и Imibuzo ye-SQL.

Njengoba umkhuba wempilo onzima ubonisa, ngokuvamile kubalulekile ukuthi ibhizinisi lisebenzise izici zebhizinisi ngezikhathi ezithile zokugcina. Ngakho-ke, izicelo ezinzima zivame ukudluliselwa ngemuva nge-caching.

Lokhu kuyathetheleleka ngokwengxenye, njengoba umsebenzisi engahlali edinga idatha yakamuva futhi kunezinga elamukelekayo lokuphendula esibonakalayo somsebenzisi.

Le ndlela ivumela ukuxazulula izidingo zebhizinisi, kodwa ekugcineni inciphisa ukusebenza kwesistimu yolwazi ngokumane ibambezele izixazululo zezinkinga.

Kuyafaneleka futhi ukukhumbula ukuthi ohlelweni lokufuna izinkomba ezidingekayo zokwengeza, iziphakamiso I-MS SQL ukwenza kahle kungase kungalungile, okuhlanganisa ngaphansi kwezimo ezilandelayo:

  1. uma sekuvele kunezinkomba ezinesethi yezinkambu ezifanayo
  2. uma izinkambu ezikuthebula zingakwazi ukukhonjwa ngenxa yemikhawulo yenkomba (echazwe kabanzi lapha).

2) Ukuhlanganisa izici zibe isibaluli esisodwa esisha

Ngezinye izikhathi ezinye izinkambu ezivela etafuleni elilodwa, elisebenza njengesisekelo seqembu lemibandela, zingathathelwa indawo ngokwethula insimu eyodwa entsha.

Lokhu kuyiqiniso ikakhulukazi ezinkambini zesimo, ngokuvamile eziba yibhithi noma inombolo ephelele ohlotsheni.

Isibonelo:

Ivaliwe = 0 FUTHI Ikhanseliwe = 0 FUTHI Ivuliwe = 0 kufakwa esikhundleni se- Isimo = 1.

Yilapho isibaluli Sesimo senombolo yethulwa khona ukuze kuqinisekiswe ukuthi lezi zimo zigcwele kuthebula. Okulandelayo, lesi sibaluli esisha siyakhonjiswa.

Lesi yisixazululo esibalulekile senkinga yokusebenza, ngoba Sifinyelela idatha ngaphandle kwezibalo ezingadingekile.

3) Ukwenziwa kwezinto ezibonakalayo

Ngeshwa, ku Imibuzo ye-LINQ Amathebula esikhashana, ama-CTE, nokuguquguquka kwethebula akukwazi ukusetshenziswa ngokuqondile.

Nokho, kukhona enye indlela yokulungiselela leli cala - ukubukwa okunenkomba.

Iqembu lesimo (kusukela esibonelweni esingenhla) Ivaliwe = 0 FUTHI Ikhanseliwe = 0 FUTHI Ivuliwe = 0 (noma isethi yezinye izimo ezifanayo) iba inketho enhle yokuzisebenzisa ekubukeni okunenkomba, igcina ucezu oluncane lwedatha kusethi enkulu.

Kepha kunemikhawulo eminingana lapho kwenziwa umbono:

  1. ukusetshenziswa kwama-subqueries, izigaba BUKHONA kufanele ishintshwe ngokusetshenziswa JOIN
  2. awukwazi ukusebenzisa imisho INYUNYANA, IZINYUNYANA ZONKE, NGAPHANDLE, UKUXABANISA
  3. Awukwazi ukusebenzisa amacebo ethebula nezigatshana OPTION
  4. akunakwenzeka ukusebenza ngemijikelezo
  5. Akunakwenzeka ukubonisa idatha ekubukeni okukodwa okuvela kumathebula ahlukene

Kubalulekile ukukhumbula ukuthi inzuzo yangempela yokusebenzisa ukubuka okunenkomba ingafinyelelwa kuphela ngokuyikhomba.

Kodwa uma ubiza umbono, lezi zinkomba zingase zingasetshenziswa, futhi ukuze uzisebenzise ngokucacile, kufanele ucacise NGE(NOEXPAND).

Kusukela ku Imibuzo ye-LINQ Akunakwenzeka ukuchaza amacebo ethebula, ngakho-ke kufanele udale esinye isethulo - "i-wrapper" yefomu elilandelayo:

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

4) Ukusebenzisa imisebenzi yetafula

Ngokuvamile ku Imibuzo ye-LINQ Amabhulokhi amakhulu emibuzo engaphansi noma amabhulokhi asebenzisa ukubukwa anesakhiwo esiyinkimbinkimbi akha umbuzo wokugcina onesakhiwo sokwenza esiyinkimbinkimbi kakhulu nesingaphansi.

Izinzuzo Eziyinhloko Zokusebenzisa Imisebenzi Yethebula ku Imibuzo ye-LINQ:

  1. Ikhono, njengasendabeni yokubuka, elizosetshenziswa futhi licaciswe njengento, kodwa ungadlula isethi yamapharamitha wokufaka:
    KUSUKA EMSEBENZINI(@param1, @param2 ...)
    Ngenxa yalokho, ukusampula kwedatha okuguquguqukayo kungafinyelelwa
  2. Esimeni sokusebenzisa umsebenzi wethebula, ayikho imikhawulo eqinile njengasendabeni yokubuka okunenkomba okuchazwe ngenhla:
    1. Amacebiso ethebula:
      ngokusebenzisa I-LINQ Awukwazi ukucacisa ukuthi yiziphi izinkomba okufanele zisetshenziswe futhi unqume izinga lokuhlukaniswa kwedatha lapho ubuza.
      Kodwa umsebenzi unalawa makhono.
      Ngomsebenzi, ungakwazi ukufeza icebo lombuzo wokwenza njalo, lapho imithetho yokusebenza ngezinkomba namazinga okuhlukaniswa kwedatha ichazwa.
    2. Ukusebenzisa umsebenzi kuvumela, uma kuqhathaniswa nokubukwa okunenkomba, ukuthola:
      • i-logic yesampula yedatha eyinkimbinkimbi (ngisho nokusebenzisa amaluphu)
      • ukulanda idatha kumathebula amaningi ahlukene
      • usebenzisa INYUNYANA и BUKHONA

  3. Ukunikela OPTION iwusizo kakhulu lapho sidinga ukuhlinzeka ngokulawula kwe-concurrency INKETHO(MAXDOP N), i-oda lohlelo lokwenziwa kombuzo. Ngokwesibonelo:
    • ungacacisa ukudalwa kabusha okuphoqelelwe kohlelo lombuzo INKETHO (RECOMPILE)
    • ungacacisa ukuthi uzophoqelela uhlelo lombuzo ukusebenzisa uhlelo lokujoyina olushiwo embuzweni INKETHO (PHOQA I-ORDER)

    Imininingwane eyengeziwe mayelana OPTION kuchaziwe lapha.

  4. Ukusebenzisa ucezu lwedatha oluwumngcingo noludingeka kakhulu:
    Asikho isidingo sokugcina amasethi edatha amakhulu kuma-caches (njengoba kunjalo ngokubukwa okunenkomba), lapho usadinga ukuhlunga idatha ngepharamitha.
    Isibonelo, kunetafula eliyisihlungi LAPHO izinkambu ezintathu zisetshenziswa (a, b, c).

    Ngokuvamile, zonke izicelo zinesimo esingaguquki a = 0 futhi b = 0.

    Nokho, isicelo insimu c okuguquguqukayo okwengeziwe.

    Vumela isimo a = 0 futhi b = 0 Kuyasisiza ngempela ukuthi sikhawulele umphumela odingekayo ezinkulungwaneni zamarekhodi, kodwa umbandela с inciphisa okukhethiwe kuze kufike kumarekhodi ayikhulu.

    Lapha umsebenzi wetafula ungaba inketho engcono.

    Futhi, umsebenzi wethebula ubikezelwa kakhulu futhi awuguquguquki ngesikhathi sokwenza.

Izibonelo

Ake sibheke ukuqaliswa kwesibonelo sisebenzisa isizindalwazi seMibuzo njengesibonelo.

Kukhona isicelo KHETHA, ehlanganisa amathebula amaningana futhi isebenzisa ukubuka okukodwa (OperativeQuestions), lapho ukusebenzelana kuhlolwa nge-imeyili (nge BUKHONA) kuya kokuthi “Imibuzo Esebenzayo” ([Imibuzo Esebenzayo]):

Isicelo No. 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])
));

Ukubuka kunesakhiwo esiyinkimbinkimbi: sinokuhlangana kwe-subquery futhi isebenzisa ukuhlunga DISTINCT, okuwumsebenzi odinga izinsiza ngokufanelekile.

Isampula elivela ku-OperativeQuestions cishe lingamarekhodi ayizinkulungwane eziyishumi.

Inkinga enkulu ngalo mbuzo ukuthi kumarekhodi avela embuzweni wangaphandle, umbuzo omncane wangaphakathi usetshenziswa ekubukeni kwe-[OperativeQuestions], okufanele okuthi [I-imeyili] = @p__linq__0 kusivumele ukuthi sikhawulele ukukhetha okukhiphayo (nge- BUKHONA) kufika kumakhulu amarekhodi.

Futhi kungase kubonakale sengathi umbuzo ongaphansi kufanele ubale amarekhodi kanye ngokuthi [I-imeyili] = @p__linq__0, futhi lawa marekhodi angamakhulu ambalwa kufanele axhunywe nge-Id Ngemibuzo, futhi umbuzo uzoshesha.

Eqinisweni, kukhona ukuxhumana okulandelanayo kwawo wonke amathebula: ukuhlola ukubhalelana kwemibuzo ye-Id nge-Id evela ku-OperativeQuestions, nokuhlunga nge-imeyili.

Eqinisweni, isicelo sisebenza nawo wonke amashumi ezinkulungwane zamarekhodi e-OperativeQuestions, kodwa idatha yentshisekelo kuphela edingekayo nge-imeyili.

Buka umbhalo we-OperativeQuestion:

Isicelo No. 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));

Ukubuka kwemephu kokuqala ku-DbContext (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 we-LINQ

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();

Kulesi simo, sicabangela isisombululo sale nkinga ngaphandle kwezinguquko zengqalasizinda, ngaphandle kokwethula ithebula elihlukile elinemiphumela esenziwe ngomumo (“Imibuzo Esebenzayo”), engadinga indlela yokuyigcwalisa ngedatha nokuyigcina isesikhathini samanje. .

Nakuba lesi kuyisixazululo esihle, kukhona enye inketho yokuthuthukisa le nkinga.

Injongo eyinhloko iwukuba kunqolobane okufakiwe nge-[Email] = @p__linq__0 ekubukeni kwe-OperativeQuestions.

Yethula umsebenzi wethebula [dbo].[OperativeQuestionsUserMail] kusizindalwazi.

Ngokuthumela i-imeyili njengepharamitha yokufaka, sithola futhi ithebula lamanani:

Isicelo No. 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

Lokhu kubuyisela ithebula lamanani ngesakhiwo sedatha esichazwe ngaphambilini.

Ukuze imibuzo ku-OperativeQuestionsUserMail ibe yelungile futhi ibe nezinhlelo zemibuzo efanelekile, kudingeka uhlaka oluqinile, hhayi IBUYISA ITHEBULA NJENGOKUBUYISA...

Kulokhu, Umbuzo 1 odingekayo uguqulelwa kumbuzo 4:

Isicelo No. 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]);

Ukubuka kwemephu nemisebenzi ku-DbContext (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 wokugcina we-LINQ

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();

Ukuhleleka kwesikhathi sokwenza kwehle kusuka ku-200-800 ms, kuya ku-2-20 ms, njll., okungukuthi izikhathi eziyishumi ngokushesha.

Uma siyithatha ngokwesilinganiso, esikhundleni sika-350 ms sithole u-8 ms.

Kusukela ezinzuzweni ezisobala siphinde sithole:

  1. ukunciphisa okujwayelekile komthwalo wokufunda,
  2. ukunciphisa okukhulu kwamathuba okuvimba
  3. ukunciphisa isilinganiso sesikhathi sokuvimbela sibe amanani amukelekayo

isiphetho

Ukuthuthukisa kanye nokucushwa kahle kwamakholi esizindalwazi I-MS SQL ngokusebenzisa I-LINQ inkinga engaxazululeka.

Ukunaka nokungaguquguquki kubaluleke kakhulu kulo msebenzi.

Ekuqaleni kwenqubo:

  1. kuyadingeka ukuhlola idatha isicelo esisebenza ngayo (amanani, izinhlobo zedatha ezikhethiwe)
  2. ukwenza inkomba efanele yale datha
  3. hlola ukunemba kwezimo zokuhlanganisa phakathi kwamathebula

Ukuphindaphinda okulandelayo kokuthuthukisa kuveza:

  1. isisekelo sesicelo futhi ichaza isihlungi sesicelo esikhulu
  2. ukuphinda amabhulokhi emibuzo efanayo nokuhlaziya ukuphambana kwezimo
  3. ku-SSMS noma enye i-GUI ye I-SQL Server iyazithuthukisa Umbuzo we-SQL (ukwaba isitoreji sedatha esimaphakathi, kwakha umbuzo owumphumela usebenzisa lesi sitoreji (kungase kube nokumbalwa))
  4. esigabeni sokugcina, ukuthatha njengesisekelo umphumela Umbuzo we-SQL, isakhiwo siyakhiwa kabusha Umbuzo we-LINQ

Umphumela Umbuzo we-LINQ kufanele ifane ngesakhiwo nesezingeni elifanele elihlonziwe Umbuzo we-SQL kusuka kuphoyinti 3.

Ukubonga

Siyabonga kakhulu kozakwethu imisebenzi и alex_ozr kusuka enkampanini Fortis ukuze uthole usizo ekulungiseleleni lolu lwazi.

Source: www.habr.com

Engeza amazwana