Metotia mo le fa'asilisiliina ole LINQ fesili ile C#.NET

Faatomuaga

В lenei tusiga o nisi auala fa'alelei sa iloiloina LINQ fesili.
O iinei matou te tuʻuina atu ai foʻi nisi auala e faʻaogaina ai le code optimization e fesoʻotaʻi ma LINQ fesili.

Ua iloa lena LINQ(Language-Integrated Query) o se gagana faigofie ma faigofie mo le fesiligia o se puna o faʻamatalaga.

А LINQ ile SQL ose tekonolosi mo le mauaina o faʻamatalaga i totonu o se DBMS. O se meafaigaluega mamana lea mo le galue i faʻamaumauga, lea e fausia ai fesili e ala i se gagana faʻaalia, lea o le a faʻaliliuina i totonu. SQL fesili tulaga ma auina atu i le server database mo le faatinoga. I la matou tulaga, o le DBMS o lona uiga MS SQL Server.

Ae ui i lea, LINQ fesili e le'i liua i ni tusitusiga sili ona lelei SQL fesili, lea e mafai e se DBA poto masani ona tusia ma faʻamatalaga uma o le faʻaleleia SQL fesili:

  1. feso'ota'iga sili ona lelei (AUAI) ma fa'amama fa'ai'uga (O FEA)
  2. tele nuances i le faʻaaogaina o fesoʻotaʻiga ma tulaga faʻavae
  3. tele fesuiaiga i tulaga suitulaga IN i O LOO IAIи E LE'I I, <> luga O LOO IAI
  4. fa'aputuga vaeluaga o fa'ai'uga e ala i laulau le tumau, CTE, fesuia'iga laulau
  5. fa'aogaina o le fuaiupu (filifiliga) faʻatasi ai ma faʻatonuga ma faʻamatalaga laulau MA (...)
  6. fa'aaogā fa'asinomaga fa'asinomaga o se tasi o auala e fa'ate'a'ese ai fa'amaumauga fa'amaumauga e tele i taimi o filifiliga

O fa'atinoga autu bottlenecks o le taunuuga SQL fesili pe a tuufaatasia LINQ fesili o:

  1. fa'amaopoopoina le faiga atoa o le filifiliga o fa'amaumauga i se talosaga e tasi
  2. fa'aluaina poloka tutusa o code, lea e i'u ai i le tele o fa'amaumauga e le mana'omia
  3. vaega o tulaga e tele vaega (fa'atatau "ma" ma le "po'o") - MA и OR, tuʻufaʻatasia i tulaga faʻalavelave, e taʻitaʻia ai le mea moni e faapea o le optimizer, o loʻo i ai faʻamatalaga talafeagai e le faʻapipiʻiina mo fanua talafeagai, e iu lava ina amata ona suʻesuʻe faʻasaga i le faʻamaufaʻailoga faʻapipiʻi (INDEX SCAN) e vaega o tulaga
  4. O le fa'amomoe loloto o subqueries e fa'alavelave tele ai le fa'avasegaina fa'amatalaga SQL ma au'ili'iliga ole fuafuaga ole fesili ile vaega a le au atia'e ma DBA

Fa'atonu auala

Se'i o tatou aga'i sa'o atu loa i metotia fa'asilisili.

1) Fa'asinomaga fa'aopoopo

E sili ona lelei le iloiloina o filiga i luga o laulau filifilia autu, talu ai e masani lava o le fesili atoa e fausia i luga o le tasi pe lua laulau autu (talosaga-tagata-faʻagaioiga) ma faʻatasi ai ma se seti masani o tulaga (IsClosed, Canceled, Enabled, Status). E taua le faia o fa'ailoga talafeagai mo fa'ata'ita'iga ua fa'ailoa mai.

O lenei fofo e talafeagai pe a filifilia nei matā'upu fa'atapula'aina le seti fa'afo'i ile fesili.

Mo se faʻataʻitaʻiga, e 500000 a matou talosaga. Ae ui i lea, e naʻo le 2000 talosaga faʻamalosi. Ona faasaoina ai lea oi tatou e se faasino igoa sa'o INDEX SCAN i luga o se laulau tele ma o le a faʻatagaina oe e vave filifili faʻamatalaga e ala i se faʻamaufaʻailoga e le faʻapipiʻiina.

E le gata i lea, o le leai o ni fa'asinomaga e mafai ona iloa e ala i fa'atonuga mo le fa'avasegaina o fuafuaga o fesili po'o le aoina o fa'amaumauga o va'aiga. MS SQL Server:

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

O fa'amatalaga va'aiga uma o lo'o i ai fa'amatalaga e uiga i fa'asinomaga o lo'o misi, se'i vagana ai fa'asinomaga fa'afanua.

Ae ui i lea, o fa'asinomaga ma le fa'asao e masani lava o auala ia e fa'afefe ai i'uga o le le lelei o le tusiaina LINQ fesili и SQL fesili.

E pei ona faʻaalia e le faʻataʻitaʻiga faigata o le olaga, e masani ona taua mo se pisinisi le faʻatinoina o pisinisi i ni taimi faʻapitoa. Ma o le mea lea, o talosaga mamafa e masani ona faʻafeiloaʻi i tua ma le faʻaogaina.

O se vaega e tauamiotonuina, talu ai e le manaʻomia e le tagata faʻaoga faʻamatalaga lata mai ma o loʻo i ai se tulaga taliaina o le tali atu o le tagata faʻaoga.

O lenei faiga e mafai ai ona foia manaoga tau pisinisi, ae iu ai ina faaitiitia le faatinoga o le faiga o faamatalaga i le na o le faatuai o fofo i faafitauli.

E taua foi le manatuaina i le faagasologa o le suʻeina o faʻamatalaga talafeagai e faʻaopoopo, fautuaga MS SQL atonu e le sa'o le fa'atonuga, e aofia ai i lalo o tulaga nei:

  1. pe afai o loʻo i ai faʻasino igoa ma se seti tutusa o fanua
  2. pe afai e le mafai ona fa'asinoina fanua i le laulau ona o tapula'a fa'asinomaga (fa'amatala auiliili iinei).

2) Tuufaatasia uiga i se tasi uiga fou

O nisi taimi o nisi fanua mai le tasi laulau, lea e avea ma faavae mo se vaega o tulaga, e mafai ona suia e ala i le faʻaofiina o se tasi fanua fou.

E moni lava lenei mea mo tulaga tulaga, lea e masani lava a le itiiti po'o le numera i le ituaiga.

Faataitaiga:

IsClosed = 0 MA Fa'aleaogaina = 0 MA Fa'agaoioi = 0 ua suia e Tulaga = 1.

O i'ina e fa'ailoa mai ai le uiga fa'atatau Tulaga integer e fa'amautinoa ai o lo'o fa'atumuina nei tulaga ile laulau. O le isi, o lenei uiga fou e faasino igoa.

O se fofo faʻavae lea i le faʻafitauli faʻatinoga, aua Matou te mauaina faʻamaumauga e aunoa ma ni faʻatusatusaga le manaʻomia.

3) Fa'atinoina o le va'aiga

Ae paga lea, i LINQ fesili E le mafai ona fa'aoga sa'o ia laulau le tumau, CTEs, ma fesuiaiga o laulau.

Ae ui i lea, o loʻo i ai se isi auala e sili ona lelei mo lenei mataupu - faʻasino igoa.

Tulaga vaega (mai le fa'ata'ita'iga i luga) IsClosed = 0 MA Fa'aleaogaina = 0 MA Fa'agaoioi = 0 (po'o se seti o isi tulaga tutusa) avea ma filifiliga lelei e fa'aoga ai i se va'aiga fa'asino igoa, fa'apipi'i sina fasi fa'amaumauga mai se seti tele.

Ae o loʻo i ai le tele o tapulaʻa pe a faʻaalia se vaaiga:

  1. fa'aogaina o subqueries, fuaiupu O LOO IAI e tatau ona suia i le faʻaaogaina AUAI
  2. e le mafai ona e faaaogaina fuaiupu UNION, UNION UMA, FAʻAALIGA, FAATALANOA
  3. E le mafai ona e fa'aogaina fa'ata'ita'iga o laulau ma fa'ai'uga filifiliga
  4. leai se avanoa e galue ai i ta'amilosaga
  5. E le mafai ona faʻaalia faʻamatalaga i le tasi vaaiga mai laulau eseese

E taua le manatua o le aoga moni o le faʻaaogaina o se vaʻaiga faʻasino igoa e mafai ona ausia e ala i le faʻasinoina moni.

Ae a vala'au se va'aiga, e le mafai ona fa'aogaina nei fa'asinomaga, ma ia fa'aoga manino, e tatau ona e fa'ama'oti. MA(NOEXPAND).

Talu mai i totonu LINQ fesili E le mafai ona faʻamatalaina faʻamatalaga laulau, o lea e tatau ai ona e faia se isi faʻatusa - o se "afifi" o le fomu nei:

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

4) Fa'aaogā galuega fa'atino

E masani i totonu LINQ fesili O poloka tetele o subqueries poʻo poloka e faʻaogaina ai vaaiga faʻatasi ai ma se fausaga lavelave e fausia ai se fesili mulimuli ma se faʻalavelave faʻapitoa ma le faʻaogaina o le faʻatinoga.

Fa'amanuiaga Autu o le Fa'aaogaina o Fuafuaga Laulau i LINQ fesili:

  1. Le gafatia, e pei o le tulaga o manatu, e faʻaaogaina ma faʻamaonia e avea o se mea, ae e mafai ona e pasia se seti o mea faʻaoga:
    MAI GALUEGA(@param1, @param2 ...)
    O le i'uga, e mafai ona maua fa'ata'ita'iga fa'amatalaga fetu'una'i
  2. I le tulaga o le faʻaaogaina o se laulau, e leai ni faʻatapulaʻa malosi e pei o le tulaga o faʻamatalaga faasinoupu o loʻo faʻamatalaina i luga:
    1. Fa'amatalaga o laulau:
      e ala i LINQ E le mafai ona e fa'ama'oti po'o fea fa'asino igoa e tatau ona fa'aoga ma fa'amautu le tulaga tu'ufua fa'amaumauga pe a fesiligia.
      Ae o le galuega o loʻo i ai nei gafatia.
      Fa'atasi ai ma le galuega, e mafai ona e ausia se fuafuaga fa'atino faifai pea, lea e fa'amatalaina ai tulafono mo le galulue fa'atasi ma fa'asinomaga ma fa'amaumauga tu'ufua.
    2. O le faʻaaogaina o le galuega e mafai ai, pe a faʻatusatusa i faʻamatalaga faasino igoa, e maua ai:
      • fa'amatalaga lavelave fa'ata'ita'iga manatu (tusa lava ma le fa'aogaina o matasele)
      • aumai fa'amatalaga mai le tele o laulau 'ese'ese
      • le faaaogaina o UNION и O LOO IAI

  3. Taulaga filifiliga aoga tele pe a tatou manaʻomia le tuʻuina atu o le faʻatonuga faʻatasi FILIFILI(MAXDOP N), le fa'asologa o le fa'atinoga o fuafuaga fa'atatau. Faataitaiga:
    • e mafai ona e fa'ailoaina se toe fa'atupu fa'amalosi ole fuafuaga ole fesili FILIFILI (RECOMPILE)
    • e mafai ona e faʻamaonia pe tatau ona faʻamalosia le fuafuaga o fesili e faʻaaoga ai le soʻotaga o loʻo faʻamaonia i le fesili FILIFILI (FORCE ORDER)

    Fa'amatalaga atili e uiga i filifiliga faamatalaina iinei.

  4. Fa'aaogā le fasi fa'amatalaga sili ona vaapiapi ma mana'omia:
    E le manaʻomia le teuina o faʻamaumauga tetele i totonu o faʻamaumauga (pei o le tulaga i faʻamatalaga faʻasinomaga), lea e te manaʻomia pea ona faʻamama le faʻamaumauga e ala i le parakalafa.
    Mo se faʻataʻitaʻiga, o loʻo i ai se laulau e faʻamamaina ai O FEA e tolu fanua e fa'aaogaina (a, b, c).

    E masani lava, o talosaga uma e iai se tulaga tumau a = 0 ma le b = 0.

    Ae ui i lea, o le talosaga mo le fanua c sili atu le fesuisuiai.

    Tuu le tulaga a = 0 ma le b = 0 E fesoasoani tele ia i matou e faʻatapulaʻa le manaʻomia o taunuuga seti i le faitau afe o faʻamaumauga, ae o le tulaga i luga с fa'aititia le filifiliga i lalo i le selau fa'amaumauga.

    O le galuega o le laulau atonu o se filifiliga sili atu.

    E le gata i lea, o le galuega o le laulau e sili atu ona vaʻaia ma tumau i le taimi o le faʻatinoga.

faataitaiga

Se'i o tatou va'ai i se fa'ata'ita'iga fa'atinoga e fa'aaoga ai le fa'amaumauga o Fesili e fai ma fa'ata'ita'iga.

E iai se talosaga FILIFILI, lea e tu'ufa'atasia ai le tele o laulau ma fa'aoga tasi le va'aiga (OperativeQuestions), lea e siaki ai le feso'ota'iga i imeli (e ala i O LOO IAI) i “Operative Questions”:

Talosaga Nu.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])
));

O le vaaiga e fai si lavelave le fausaga: o loʻo i ai soʻotaga subquery ma faʻaogaina le faʻavasegaina TUSI, lea i se tulaga lautele o se faʻagaioiga faʻapitoa-maualuga.

O se fa'ata'ita'iga mai le OperativeQuestions e tusa ma le sefulu afe fa'amaumauga.

O le fa'afitauli autu i lenei fesili o le mo fa'amaumauga mai le fesili i fafo, o lo'o fa'atinoina se su'esu'ega i totonu i luga o le vaaiga [OperativeQuestions], lea e tatau mo [Imeli] = @p__linq__0 matou te fa'atapula'aina le filifiliga o galuega (e ala i O LOO IAI) e oo atu i le selau o faamaumauga.

Ma e foliga mai e tatau i le subquery ona fuafua faʻamaumauga i le taimi e tasi e [Imeli] = @p__linq__0, ona faʻafesoʻotaʻi lea o nei lua selau faamaumauga e Id ma Fesili, ma o le a vave le fesili.

O le mea moni, o loʻo i ai se fesoʻotaʻiga faʻasolosolo o laulau uma: siaki le fesoʻotaʻiga o Id Questions ma Id mai OperativeQuestions, ma le faʻamamaina e ala ile Email.

O le mea moni, o le talosaga e galue ma le fiasefulu afe o faamaumauga OperativeQuestions, ae naʻo faʻamatalaga o tului e manaʻomia e ala ile Email.

OperativeQuestions va'ai tusitusiga:

Talosaga Nu.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));

Uluai va'aiga fa'afanua ile 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");
    }
}

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

I lenei tulaga faʻapitoa, o loʻo matou iloiloina se fofo i lenei faʻafitauli e aunoa ma ni suiga faʻapitoa, e aunoa ma le faʻaofiina o se laulau eseʻese ma faʻaiʻuga ua saunia ("Active Queries"), lea e manaʻomia ai se masini mo le faʻatumuina o faʻamaumauga ma faʻamaumau i le taimi nei. .

E ui lava o se fofo lelei lea, o loʻo i ai se isi filifiliga e faʻamalieina ai lenei faʻafitauli.

O le fa'amoemoega autu o le fa'asaoina o fa'amaumauga e le [Imeli] = @p__linq__0 mai le vaaiga OperativeQuestions.

Fa'ailoa le galuega o le laulau [dbo].[OperativeQuestionsUserMail] i totonu o fa'amaumauga.

E ala i le tuʻuina atu o le imeli e fai ma faʻamaufaʻailoga, matou te toe maua se laulau o tau:

Talosaga Nu.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

Ole mea lea e toe fa'afo'i ai se laulau o tau fa'atasi ma se fa'asologa o fa'amaumauga.

Ina ia mafai ona sili atu fesili i le OperativeQuestionsUserMail ma maua ni fuafuaga sili ona lelei, e manaʻomia se fausaga faʻapitoa, ae le. FA'AFO'I LA'AU FA'A'ALI'I...

I lenei tulaga, o le Query 1 mana'omia ua liua i le Query 4:

Talosaga Nu.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]);

Fa'afanua vaaiga ma galuega i le 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})");
}

Ole fesili mulimuli ole 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();

O le faasologa o le taimi o le faʻatinoga ua pa'ū mai le 200-800 ms, i le 2-20 ms, ma isi, o lona uiga o le sefulu taimi vave.

Afai e sili atu le averesi, o lona uiga nai lo le 350 ms e maua le 8 ms.

Mai fa'amanuiaga manino tatou te maua fo'i:

  1. fa'aitiitiga lautele i uta faitau,
  2. fa'aitiitiga taua i le ono poloka
  3. fa'aitiitia le averesi taimi poloka i tau e talia

iʻuga

Fa'asilisili ma fa'alelei fa'alelei o telefoni fa'amaumauga MS SQL e ala i LINQ o se faafitauli e mafai ona foia.

O le gauai atu ma le tumau e taua tele i lenei galuega.

I le amataga o le faagasologa:

  1. e tatau ona siaki faʻamaumauga o loʻo galue ai le talosaga (taua, ituaiga faʻamaumauga filifilia)
  2. faia le fa'asinomaga tatau o nei fa'amaumauga
  3. siaki le sa'o o le tu'ufa'atasiga i le va o laulau

O le isi su'esu'ega fa'alelei e fa'aalia:

  1. fa'avae ole talosaga ma fa'amatala le fa'amama ole talosaga autu
  2. toe fai poloka fesili tutusa ma au'ili'ili le vaeluaga o tulaga
  3. i SSMS poʻo isi GUI mo Tūmau SQL optimizes ia lava SQL fesili (tuuina o se teuina o faʻamatalaga vavalo, fausia le faʻaiʻuga e faʻaaoga ai lenei teuina (atonu e tele))
  4. i le tulaga mulimuli, avea ma faavae o le taunuuga SQL fesili, o loʻo toe faʻaleleia le fausaga LINQ fesili

O le taunuuga LINQ fesili e tatau ona tutusa le fausaga i le tulaga sili ona lelei SQL fesili mai le vaega 3.

Faʻafetai

Faafetai tele i paaga galuega и alex_ozr mai le kamupani Fortis mo fesoasoani i le sauniaina o lenei mea.

puna: www.habr.com

Faaopoopo i ai se faamatalaga