LINQ เจจเฉ .NET เจจเฉเฉฐ เจเฉฑเจ เจธเจผเจเจคเฉเจธเจผเจพเจฒเฉ เจจเจตเฉเจ เจกเจพเจเจพ เจนเฉเจฐเจพเจซเฉเจฐเฉ เจญเจพเจธเจผเจพ เจตเจเฉเจ เจฆเจพเจเจฒ เจเฉเจคเจพ เจนเฉเฅค เจเจธเจฆเฉ เจนเจฟเฉฑเจธเฉ เจตเจเฉเจ LINQ เจคเฉเจ SQL เจคเฉเจนเจพเจจเฉเฉฐ DBMS เจจเจพเจฒ เจเจพเจซเจผเฉ เจธเฉเจตเจฟเจงเจพเจเจจเจ เจขเฉฐเจ เจจเจพเจฒ เจธเฉฐเจเจพเจฐ เจเจฐเจจ เจฆเฉ เจเจเจพเจเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉ, เจเจฆเจพเจนเจฐเจจ เจฒเจ, เจเจเจเจฟเจเฉ เจซเจฐเฉเจฎเจตเจฐเจเฅค เจนเจพเจฒเจพเจเจเจฟ, เจ
เจเจธเจฐ เจเจธเจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเฉเจ, เจกเจฟเจตเฉเจฒเจชเจฐ เจเจน เจฆเฉเจเจฃเจพ เจญเฉเฉฑเจฒ เจเจพเจเจฆเฉ เจนเจจ เจเจฟ เจธเจตเจพเจฒ เจเจฐเจจ เจฏเฉเจ เจชเฉเจฐเจฆเจพเจคเจพ, เจคเฉเจนเจพเจกเฉ เจเฉเจธ เจตเจฟเฉฑเจ เจเจเจเจฟเจเฉ เจซเจฐเฉเจฎเจตเจฐเจ, เจเจฟเจธ เจเจฟเจธเจฎ เจฆเฉ SQL เจชเฉเฉฑเจเจเจฟเฉฑเจ เจคเจฟเจเจฐ เจเจฐเฉเจเจพเฅค
เจเจ เจเฉฑเจ เจเจฆเจพเจนเจฐเจฃ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเฉเจ เจฆเฉ เจฎเฉเฉฑเจ เจจเฉเจเจคเจฟเจเจ เจจเฉเฉฐ เจตเฉเจเฉเจเฅค
เจ
เจเจฟเจนเจพ เจเจฐเจจ เจฒเจ, SQL เจธเจฐเจตเจฐ เจตเจฟเฉฑเจ เจเฉฑเจ เจเฉเจธเจ เจกเฉเจเจพเจฌเฉเจธ เจฌเจฃเจพเจ, เจ
เจคเฉ เจนเฉเจ เจพเจ เจฆเจฟเฉฑเจคเฉ เจชเฉเฉฑเจเจเจฟเฉฑเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจเจธ เจตเจฟเฉฑเจ เจฆเฉ เจเฉเจฌเจฒ เจฌเจฃเจพเจ:
เจเฉเจฌเจฒ เจฌเจฃเจพเจเจฃเจพ
USE [TEST]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Ref](
[ID] [int] NOT NULL,
[ID2] [int] NOT NULL,
[Name] [nvarchar](255) NOT NULL,
[InsertUTCDate] [datetime] NOT NULL,
CONSTRAINT [PK_Ref] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Ref] ADD CONSTRAINT [DF_Ref_InsertUTCDate] DEFAULT (getutcdate()) FOR [InsertUTCDate]
GO
USE [TEST]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Customer](
[ID] [int] NOT NULL,
[Name] [nvarchar](255) NOT NULL,
[Ref_ID] [int] NOT NULL,
[InsertUTCDate] [datetime] NOT NULL,
[Ref_ID2] [int] NOT NULL,
CONSTRAINT [PK_Customer] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Customer] ADD CONSTRAINT [DF_Customer_Ref_ID] DEFAULT ((0)) FOR [Ref_ID]
GO
ALTER TABLE [dbo].[Customer] ADD CONSTRAINT [DF_Customer_InsertUTCDate] DEFAULT (getutcdate()) FOR [InsertUTCDate]
GO
เจนเฉเจฃ เจนเฉเจ เจพเจ เจฆเจฟเฉฑเจคเฉ เจธเจเฉเจฐเจฟเจชเจ เจจเฉเฉฐ เจเจฒเจพ เจเฉ เจฐเฉเจซ เจเฉเจฌเจฒ เจจเฉเฉฐ เจคเจฟเจเจฐ เจเจฐเฉเจ:
เจฐเฉเจซ เจเฉเจฌเจฒ เจจเฉเฉฐ เจญเจฐเจจเจพ
USE [TEST]
GO
DECLARE @ind INT=1;
WHILE(@ind<1200000)
BEGIN
INSERT INTO [dbo].[Ref]
([ID]
,[ID2]
,[Name])
SELECT
@ind
,@ind
,CAST(@ind AS NVARCHAR(255));
SET @ind=@ind+1;
END
GO
เจเจฒเฉ เจเจธเฉ เจคเจฐเฉเจนเจพเจ เจนเฉเจ เจพเจ เจฆเจฟเฉฑเจคเฉ เจธเจเฉเจฐเจฟเจชเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจเจพเจนเจ เจธเจพเจฐเจฃเฉ เจจเฉเฉฐ เจญเจฐเฉเจ:
เจเจพเจนเจ เจธเจพเจฐเจฃเฉ เจจเฉเฉฐ เจคเจฟเจเจฐ เจเฉเจคเจพ เจเจพ เจฐเจฟเจนเจพ เจนเฉ
USE [TEST]
GO
DECLARE @ind INT=1;
DECLARE @ind_ref INT=1;
WHILE(@ind<=12000000)
BEGIN
IF(@ind%3=0) SET @ind_ref=1;
ELSE IF (@ind%5=0) SET @ind_ref=2;
ELSE IF (@ind%7=0) SET @ind_ref=3;
ELSE IF (@ind%11=0) SET @ind_ref=4;
ELSE IF (@ind%13=0) SET @ind_ref=5;
ELSE IF (@ind%17=0) SET @ind_ref=6;
ELSE IF (@ind%19=0) SET @ind_ref=7;
ELSE IF (@ind%23=0) SET @ind_ref=8;
ELSE IF (@ind%29=0) SET @ind_ref=9;
ELSE IF (@ind%31=0) SET @ind_ref=10;
ELSE IF (@ind%37=0) SET @ind_ref=11;
ELSE SET @ind_ref=@ind%1190000;
INSERT INTO [dbo].[Customer]
([ID]
,[Name]
,[Ref_ID]
,[Ref_ID2])
SELECT
@ind,
CAST(@ind AS NVARCHAR(255)),
@ind_ref,
@ind_ref;
SET @ind=@ind+1;
END
GO
เจเจธ เจคเจฐเฉเจนเจพเจ, เจธเจพเจจเฉเฉฐ เจฆเฉ เจเฉเจฌเจฒ เจชเฉเจฐเจพเจชเจค เจนเฉเจ, เจเจฟเจจเฉเจนเจพเจ เจตเจฟเฉฑเจเฉเจ เจเฉฑเจ เจตเจฟเฉฑเจ เจกเฉเจเจพ เจฆเฉเจเจ 1 เจฎเจฟเจฒเฉเจ เจจ เจคเฉเจ เจตเฉฑเจง เจเจคเจพเจฐเจพเจ เจนเจจ, เจ เจคเฉ เจฆเฉเจเฉ เจตเจฟเฉฑเจ เจกเฉเจเจพ เจฆเฉเจเจ 10 เจฎเจฟเจฒเฉเจ เจจ เจคเฉเจ เจตเฉฑเจง เจเจคเจพเจฐเจพเจ เจนเจจเฅค
เจนเฉเจฃ เจตเจฟเจเจผเฉเจ เจฒ เจธเจเฉเจกเฉเจ เจตเจฟเฉฑเจ เจคเฉเจนเจพเจจเฉเฉฐ เจเฉฑเจ เจเฉเจธเจ เจตเจฟเจเจผเฉเจ เจฒ C# เจเฉฐเจธเฉเจฒ เจเจช (.NET เจซเจฐเฉเจฎเจตเจฐเจ) เจชเฉเจฐเฉเจเฉเจเจ เจฌเจฃเจพเจเจฃ เจฆเฉ เจฒเฉเฉ เจนเฉ:
เจ
เฉฑเจเฉ, เจคเฉเจนเจพเจจเฉเฉฐ เจกเฉเจเจพเจฌเฉเจธ เจจเจพเจฒ เจเฉฐเจเจฐเฉเจเจ เจเจฐเจจ เจฒเจ เจเจเจพเจ เจซเจฐเฉเจฎเจตเจฐเจ เจฒเจ เจเฉฑเจ เจฒเจพเจเจฌเฉเจฐเฉเจฐเฉ เจเฉเฉเจจ เจฆเฉ เจฒเฉเฉ เจนเฉเฅค
เจเจธ เจจเฉเฉฐ เจเฉเฉเจจ เจฒเจ, เจชเฉเจฐเฉเจเฉเจเจ 'เจคเฉ เจธเฉฑเจเจพ-เจเจฒเจฟเฉฑเจ เจเจฐเฉ เจ
เจคเฉ เจธเฉฐเจฆเจฐเจญ เจฎเฉเจจเฉ เจคเฉเจ NuGet เจชเฉเจเฉเจ เจชเฉเจฐเจฌเฉฐเจงเจฟเจค เจเจฐเฉ เจฆเฉ เจเฉเจฃ เจเจฐเฉ:
เจซเจฟเจฐ, เจฆเจฟเจธเจฃ เจตเจพเจฒเฉ NuGet เจชเฉเจเฉเจ เจชเฉเจฐเจฌเฉฐเจงเจจ เจตเจฟเฉฐเจกเฉ เจตเจฟเฉฑเจ, เจเฉเจ เจตเจฟเฉฐเจกเฉ เจตเจฟเฉฑเจ "เจเจเจเจฟเจเฉ เจซเจฐเฉเจฎเจตเจฐเจ" เจธเจผเจฌเจฆ เจฆเจฐเจ เจเจฐเฉ เจ
เจคเฉ เจเจเจพเจ เจซเจฐเฉเจฎเจตเจฐเจ เจชเฉเจเฉเจ เจจเฉเฉฐ เจเฉเจฃเฉ เจ
เจคเฉ เจเจธเจจเฉเฉฐ เจธเจฅเจพเจชเจฟเจค เจเจฐเฉ:
เจ
เฉฑเจเฉ, App.config เจซเจพเจเจฒ เจตเจฟเฉฑเจ, configSection เจคเฉฑเจค เจจเฉเฉฐ เจฌเฉฐเจฆ เจเจฐเจจ เจคเฉเจ เจฌเจพเจ
เจฆ, เจคเฉเจนเจพเจจเฉเฉฐ เจนเฉเจ เจพเจ เจฆเจฟเฉฑเจคเฉ เจฌเจฒเจพเจ เจจเฉเฉฐ เจเฉเฉเจจ เจฆเฉ เจฒเฉเฉ เจนเฉ:
<connectionStrings>
<add name="DBConnection" connectionString="data source=ะะะฏ_ะญะะะะะะะฏะ ะ_MSSQL;Initial Catalog=TEST;Integrated Security=True;" providerName="System.Data.SqlClient" />
</connectionStrings>
เจเจจเฉเจเจธเจผเจจเจธเจเฉเจฐเจฟเฉฐเจ เจตเจฟเฉฑเจ เจคเฉเจนเจพเจจเฉเฉฐ เจเจจเฉเจเจธเจผเจจ เจธเจคเจฐ เจฆเจฐเจ เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉเฅค
เจนเฉเจฃ เจตเฉฑเจ-เจตเฉฑเจ เจซเจพเจเจฒเจพเจ เจตเจฟเฉฑเจ 3 เจเฉฐเจเจฐเจซเฉเจธ เจฌเจฃเจพเจ:
- IBaseEntityID เจเฉฐเจเจฐเจซเฉเจธ เจจเฉเฉฐ เจฒเจพเจเฉ เจเจฐเจจเจพ
namespace TestLINQ { public interface IBaseEntityID { int ID { get; set; } } }
- IBaseEntityName เจเฉฐเจเจฐเจซเฉเจธ เจจเฉเฉฐ เจฒเจพเจเฉ เจเจฐเจจเจพ
namespace TestLINQ { public interface IBaseEntityName { string Name { get; set; } } }
- IBaseNameInsertUTCDate เจเฉฐเจเจฐเจซเฉเจธ เจจเฉเฉฐ เจฒเจพเจเฉ เจเจฐเจจเจพ
namespace TestLINQ { public interface IBaseNameInsertUTCDate { DateTime InsertUTCDate { get; set; } } }
เจ เจคเฉ เจเฉฑเจ เจตเฉฑเจเจฐเฉ เจซเจพเจเจฒ เจตเจฟเฉฑเจ เจ เจธเฉเจ เจเจชเจฃเฉเจเจ เจฆเฉ เจธเฉฐเจธเจฅเจพเจตเจพเจ เจฒเจ เจเฉฑเจ เจฌเฉเจธ เจเจฒเจพเจธ BaseEntity เจฌเจฃเจพเจตเจพเจเจเฉ, เจเจฟเจธ เจตเจฟเฉฑเจ เจธเจพเจเจเฉ เจเฉเจคเจฐ เจธเจผเจพเจฎเจฒ เจนเฉเจฃเจเฉ:
เจฌเฉเจธ เจเจฒเจพเจธ BaseEntity เจจเฉเฉฐ เจฒเจพเจเฉ เจเจฐเจจเจพ
namespace TestLINQ
{
public class BaseEntity : IBaseEntityID, IBaseEntityName, IBaseNameInsertUTCDate
{
public int ID { get; set; }
public string Name { get; set; }
public DateTime InsertUTCDate { get; set; }
}
}
เจ เฉฑเจเฉ, เจ เจธเฉเจ เจเจชเจฃเฉเจเจ เจฆเฉ เจธเฉฐเจธเจฅเจพเจตเจพเจ เจจเฉเฉฐ เจตเฉฑเจเจฐเฉเจเจ เจซเจพเจเจฒเจพเจ เจตเจฟเฉฑเจ เจฌเจฃเจพเจตเจพเจเจเฉ:
- เจฐเฉเจซ เจเจฒเจพเจธ เจจเฉเฉฐ เจฒเจพเจเฉ เจเจฐเจจเจพ
using System.ComponentModel.DataAnnotations.Schema; namespace TestLINQ { [Table("Ref")] public class Ref : BaseEntity { public int ID2 { get; set; } } }
- เจเจพเจนเจ เจตเจฐเจ เจจเฉเฉฐ เจฒเจพเจเฉ เจเจฐเจจเจพ
using System.ComponentModel.DataAnnotations.Schema; namespace TestLINQ { [Table("Customer")] public class Customer: BaseEntity { public int Ref_ID { get; set; } public int Ref_ID2 { get; set; } } }
เจนเฉเจฃ เจเฉฑเจ เจตเฉฑเจเจฐเฉ เจซเจพเจเจฒ เจตเจฟเฉฑเจ เจเฉฑเจ UserContext เจธเฉฐเจฆเจฐเจญ เจฌเจฃเจพเจ:
UserContex เจเจฒเจพเจธ เจจเฉเฉฐ เจฒเจพเจเฉ เจเจฐเจจเจพ
using System.Data.Entity;
namespace TestLINQ
{
public class UserContext : DbContext
{
public UserContext()
: base("DbConnection")
{
Database.SetInitializer<UserContext>(null);
}
public DbSet<Customer> Customer { get; set; }
public DbSet<Ref> Ref { get; set; }
}
}
เจธเจพเจจเฉเฉฐ MS SQL เจธเจฐเจตเจฐ เจฒเจ EF เจฆเฉเจเจฐเจพ LINQ เจคเฉเจ SQL เจฆเฉ เจจเจพเจฒ เจเจชเจเฉเจฎเจพเจเจเฉเจธเจผเจจ เจเฉเจธเจ เจเจฐเจตเจพเจเจฃ เจฒเจ เจเฉฑเจ เจคเจฟเจเจฐ-เจฌเจฃเจพเจเจ เจนเฉฑเจฒ เจชเฉเจฐเจพเจชเจค เจนเฉเจเจ เจนเฉ:
เจนเฉเจฃ Program.cs เจซเจพเจเจฒ เจตเจฟเฉฑเจ เจนเฉเจ เจพเจ เจฆเจฟเฉฑเจคเฉ เจเฉเจก เจจเฉเฉฐ เจฆเจพเจเจฒ เจเจฐเฉ:
Program.cs เจซเจผเจพเจเจฒ
using System;
using System.Collections.Generic;
using System.Linq;
namespace TestLINQ
{
class Program
{
static void Main(string[] args)
{
using (UserContext db = new UserContext())
{
var dblog = new List<string>();
db.Database.Log = dblog.Add;
var query = from e1 in db.Customer
from e2 in db.Ref
where (e1.Ref_ID == e2.ID)
&& (e1.Ref_ID2 == e2.ID2)
select new { Data1 = e1.Name, Data2 = e2.Name };
var result = query.Take(1000).ToList();
Console.WriteLine(dblog[1]);
Console.ReadKey();
}
}
}
}
เจ เฉฑเจเฉ, เจเจ เจเจชเจฃเจพ เจชเฉเจฐเฉเจเฉเจเจ เจฒเจพเจเจ เจเจฐเฉเจเฅค
เจเฉฐเจฎ เจฆเฉ เจ เฉฐเจค 'เจคเฉ, เจเฉฐเจธเฉเจฒ 'เจคเฉ เจนเฉเจ เจพเจ เจฆเจฟเฉฑเจคเฉ เจชเฉเจฐเจฆเจฐเจธเจผเจฟเจค เจเฉเจคเฉ เจเจพเจฃเจเฉ:
เจคเจฟเจเจฐ เจเฉเจคเฉ SQL เจชเฉเฉฑเจเจเจฟเฉฑเจ
SELECT TOP (1000)
[Extent1].[Ref_ID] AS [Ref_ID],
[Extent1].[Name] AS [Name],
[Extent2].[Name] AS [Name1]
FROM [dbo].[Customer] AS [Extent1]
INNER JOIN [dbo].[Ref] AS [Extent2] ON ([Extent1].[Ref_ID] = [Extent2].[ID]) AND ([Extent1].[Ref_ID2] = [Extent2].[ID2])
เจฏเจพเจจเฉ, เจเจฎ เจคเฉเจฐ 'เจคเฉ, LINQ เจเจฟเจเจฐเฉ เจจเฉ MS SQL เจธเจฐเจตเจฐ DBMS เจฒเจ เจเฉฑเจ SQL เจชเฉเฉฑเจเจเจฟเฉฑเจ เจเจพเจซเจผเฉ เจเฉฐเจเฉ เจคเจฐเฉเจนเจพเจ เจคเจฟเจเจฐ เจเฉเจคเฉ เจนเฉเฅค
เจเจ เจนเฉเจฃ LINQ เจชเฉเฉฑเจเจเจฟเฉฑเจ เจตเจฟเฉฑเจ AND เจเฉฐเจกเฉเจธเจผเจจ เจจเฉเฉฐ OR เจตเจฟเฉฑเจ เจฌเจฆเจฒเฉเจ:
LINQ เจชเฉเฉฑเจเจเจฟเฉฑเจ
var query = from e1 in db.Customer
from e2 in db.Ref
where (e1.Ref_ID == e2.ID)
|| (e1.Ref_ID2 == e2.ID2)
select new { Data1 = e1.Name, Data2 = e2.Name };
เจ เจคเฉ เจเจ เจเจชเจฃเฉ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจจเฉเฉฐ เจฆเฉเจฌเจพเจฐเจพ เจฒเจพเจเจ เจเจฐเฉเจเฅค
เจเจฎเจพเจเจก เจเจเจเจผเฉเจเจฟเจเจธเจผเจจ เจเจพเจเจฎ 30 เจธเจเจฟเฉฐเจเจพเจ เจคเฉเจ เจตเฉฑเจง เจนเฉเจฃ เจเจพเจฐเจจ เจเจเจเจผเฉเจเจฟเจเจธเจผเจจ เจเจฒเจคเฉ เจจเจพเจฒ เจเฉเจฐเฉเจธเจผ เจนเฉ เจเจพเจตเฉเจเจพ:
เจเฉเจเจฐ เจคเฉเจธเฉเจ LINQ เจฆเฉเจเจฐเจพ เจคเจฟเจเจฐ เจเฉเจคเฉ เจเจ เจชเฉเฉฑเจเจเจฟเฉฑเจ เจจเฉเฉฐ เจฆเฉเจเจฆเฉ เจนเฉ:
, เจซเจฟเจฐ เจคเฉเจธเฉเจ เจเจน เจฏเจเฉเจจเฉ เจฌเจฃเจพ เจธเจเจฆเฉ เจนเฉ เจเจฟ เจเฉเจฃ เจฆเฉ เจธเฉเฉฑเจเจพเจ (เจเฉเจฌเจฒ) เจฆเฉ เจเจพเจฐเจเฉเจธเจผเฉเจ
เจจ เจเจคเจชเจพเจฆ เจฆเฉเจเจฐเจพ เจนเฉเฉฐเจฆเฉ เจนเฉ:
เจคเจฟเจเจฐ เจเฉเจคเฉ SQL เจชเฉเฉฑเจเจเจฟเฉฑเจ
SELECT TOP (1000)
[Extent1].[Ref_ID] AS [Ref_ID],
[Extent1].[Name] AS [Name],
[Extent2].[Name] AS [Name1]
FROM [dbo].[Customer] AS [Extent1]
CROSS JOIN [dbo].[Ref] AS [Extent2]
WHERE [Extent1].[Ref_ID] = [Extent2].[ID] OR [Extent1].[Ref_ID2] = [Extent2].[ID2]
เจเจ LINQ เจชเฉเฉฑเจเจเจฟเฉฑเจ เจจเฉเฉฐ เจนเฉเจ เจพเจ เจฒเจฟเจเฉ เจ เจจเฉเจธเจพเจฐ เจฆเฉเจฌเจพเจฐเจพ เจฒเจฟเจเฉเจ:
เจ เจจเฉเจเฉเจฒเจฟเจค LINQ เจชเฉเฉฑเจเจเจฟเฉฑเจ
var query = (from e1 in db.Customer
join e2 in db.Ref
on e1.Ref_ID equals e2.ID
select new { Data1 = e1.Name, Data2 = e2.Name }).Union(
from e1 in db.Customer
join e2 in db.Ref
on e1.Ref_ID2 equals e2.ID2
select new { Data1 = e1.Name, Data2 = e2.Name });
เจซเจฟเจฐ เจธเจพเจจเฉเฉฐ เจนเฉเจ เจฆเจฟเฉฑเจคเฉ SQL เจชเฉเฉฑเจเจเจฟเฉฑเจ เจฎเจฟเจฒเจฆเฉ เจนเฉ:
SQL เจชเฉเฉฑเจเจเจฟเฉฑเจ
SELECT
[Limit1].[C1] AS [C1],
[Limit1].[C2] AS [C2],
[Limit1].[C3] AS [C3]
FROM ( SELECT DISTINCT TOP (1000)
[UnionAll1].[C1] AS [C1],
[UnionAll1].[Name] AS [C2],
[UnionAll1].[Name1] AS [C3]
FROM (SELECT
1 AS [C1],
[Extent1].[Name] AS [Name],
[Extent2].[Name] AS [Name1]
FROM [dbo].[Customer] AS [Extent1]
INNER JOIN [dbo].[Ref] AS [Extent2] ON [Extent1].[Ref_ID] = [Extent2].[ID]
UNION ALL
SELECT
1 AS [C1],
[Extent3].[Name] AS [Name],
[Extent4].[Name] AS [Name1]
FROM [dbo].[Customer] AS [Extent3]
INNER JOIN [dbo].[Ref] AS [Extent4] ON [Extent3].[Ref_ID2] = [Extent4].[ID2]) AS [UnionAll1]
) AS [Limit1]
เจนเจพเจ, LINQ เจชเฉเฉฑเจเจเจฟเฉฑเจเจพเจ เจตเจฟเฉฑเจ เจธเจฟเจฐเจซเจผ เจเฉฑเจ เจเฉเฉเจจ เจฆเฉ เจธเจผเจฐเจค เจนเฉ เจธเจเจฆเฉ เจนเฉ, เจเจธเจฒเจ เจเฉฑเจฅเฉ เจนเจฐเฉเจ เจธเจผเจฐเจค เจฒเจ เจฆเฉ เจธเจตเจพเจฒเจพเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจ
เจคเฉ เจซเจฟเจฐ เจเจคเจพเจฐเจพเจ เจตเจฟเฉฑเจ เจกเฉเจชเจฒเฉเจเฉเจ เจจเฉเฉฐ เจนเจเจพเจเจฃ เจฒเจ เจฏเฉเจจเฉเจ
เจจ เจฆเฉเจเจฐเจพ เจเจนเจจเจพเจ เจจเฉเฉฐ เจเฉเฉ เจเฉ เจเฉฑเจ เจฌเจฐเจพเจฌเจฐ เจชเฉเฉฑเจเจเจฟเฉฑเจ เจเจฐเจจเจพ เจธเฉฐเจญเจต เจนเฉเฅค
เจนเจพเจ, เจชเฉเฉฑเจเจเจฟเฉฑเจเจพเจ เจเจฎ เจคเฉเจฐ 'เจคเฉ เจเฉเจฐ-เจฌเจฐเจพเจฌเจฐ เจนเฉเจฃเจเฉเจเจ, เจเจธ เจเฉฑเจฒ เจจเฉเฉฐ เจงเจฟเจเจจ เจตเจฟเฉฑเจ เจฐเฉฑเจเจฆเฉ เจนเฉเจ เจเจฟ เจชเฉเจฐเฉ เจกเฉเจชเจฒเฉเจเฉเจ เจเจคเจพเจฐเจพเจ เจตเจพเจชเจธ เจเฉเจคเฉเจเจ เจเจพ เจธเจเจฆเฉเจเจ เจนเจจเฅค เจนเจพเจฒเจพเจเจเจฟ, เจ
เจธเจฒ เจเจผเจฟเฉฐเจฆเจเฉ เจตเจฟเฉฑเจ, เจชเฉเจฐเฉ เจกเฉเจชเจฒเฉเจเฉเจ เจฒเจพเจเจจเจพเจ เจฆเฉ เจเจผเจฐเฉเจฐเจค เจจเจนเฉเจ เจนเฉเฉฐเจฆเฉ เจนเฉ เจ
เจคเฉ เจฒเฉเจ เจเจจเฉเจนเจพเจ เจคเฉเจ เจเฉเจเจเจพเจฐเจพ เจชเจพเจเจฃ เจฆเฉ เจเฉเจธเจผเจฟเจธเจผ เจเจฐเจฆเฉ เจนเจจ.
เจเจ เจนเฉเจฃ เจเจนเจจเจพเจ เจฆเฉ เจธเจตเจพเจฒเจพเจ เจฆเฉ เจเจเจเจผเฉเจเจฟเจเจธเจผเจจ เจชเจฒเจพเจจ เจฆเฉ เจคเฉเจฒเจจเจพ เจเจฐเฉเจ:
- CROSS JOIN เจฒเจ เจเจธเจค เจเจเจเจผเฉเจเจฟเจเจธเจผเจจ เจเจพเจเจฎ 195 เจธเจเจฟเฉฐเจ เจนเฉ:
- INNER JoIN-UNION เจฒเจ เจเจธเจค เจเจเจเจผเฉเจเจฟเจเจธเจผเจจ เจธเจฎเจพเจ 24 เจธเจเจฟเฉฐเจเจพเจ เจคเฉเจ เจเฉฑเจ เจนเฉ:
เจเจฟเจตเฉเจ เจเจฟ เจคเฉเจธเฉเจ เจจเจคเฉเจเจฟเจเจ เจคเฉเจ เจฆเฉเจ เจธเจเจฆเฉ เจนเฉ, เจฒเฉฑเจเจพเจ เจฐเจฟเจเจพเจฐเจกเจพเจ เจตเจพเจฒเฉเจเจ เจฆเฉ เจเฉเจฌเจฒเจพเจ เจฒเจ, เจ เจจเฉเจเฉเจฒเจฟเจค LINQ เจชเฉเฉฑเจเจเจฟเฉฑเจ เจเฉเจฐ-เจ เจจเฉเจเฉเจฒเจฟเจค เจจเจพเจฒเฉเจ เจเจ เจเฉเจฃเจพ เจคเฉเจเจผ เจนเฉเฅค
เจธเจผเจฐเจคเจพเจ เจตเจฟเฉฑเจ AND เจฆเฉ เจตเจฟเจเจฒเจช เจฒเจ, เจซเจพเจฐเจฎ เจฆเฉ เจเฉฑเจ LINQ เจชเฉเฉฑเจเจเจฟเฉฑเจ:
LINQ เจชเฉเฉฑเจเจเจฟเฉฑเจ
var query = from e1 in db.Customer
from e2 in db.Ref
where (e1.Ref_ID == e2.ID)
&& (e1.Ref_ID2 == e2.ID2)
select new { Data1 = e1.Name, Data2 = e2.Name };
เจธเจนเฉ SQL เจชเฉเฉฑเจเจเจฟเฉฑเจ เจฒเจเจญเจ เจนเจฎเฉเจธเจผเจพเจ เจคเจฟเจเจฐ เจเฉเจคเฉ เจเจพเจตเฉเจเฉ, เจเฉ เจเจธเจคเจจ 1 เจธเจเจฟเฉฐเจ เจตเจฟเฉฑเจ เจเฉฑเจฒเฉเจเฉ:
เจเฉฑเจ เจชเฉเฉฑเจเจเจฟเฉฑเจ เจฆเฉ เจฌเจเจพเจ LINQ เจคเฉเจ เจเจฌเจเฉเจเจ เจนเฉเจฐเจพเจซเฉเจฐเฉ เจฒเจ เจตเฉ:
LINQ เจชเฉเฉฑเจเจเจฟเฉฑเจ (เจชเจนเจฟเจฒเจพ เจตเจฟเจเจฒเจช)
var query = from e1 in seq1
from e2 in seq2
where (e1.Key1==e2.Key1)
&& (e1.Key2==e2.Key2)
select new { Data1 = e1.Data, Data2 = e2.Data };
เจคเฉเจธเฉเจ เจเฉฑเจ เจชเฉเฉฑเจเจเจฟเฉฑเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐ เจธเจเจฆเฉ เจนเฉ เจเจฟเจตเฉเจ:
LINQ เจชเฉเฉฑเจเจเจฟเฉฑเจ (เจชเจนเจฟเจฒเจพ เจตเจฟเจเจฒเจช)
var query = from e1 in seq1
join e2 in seq2
on new { e1.Key1, e1.Key2 } equals new { e2.Key1, e2.Key2 }
select new { Data1 = e1.Data, Data2 = e2.Data };
เจเจฟเฉฑเจฅเฉ:
เจฆเฉ เจเจฐเฉ เจฆเฉ เจชเจฐเจฟเจญเจพเจธเจผเจพ
Para[] seq1 = new[] { new Para { Key1 = 1, Key2 = 2, Data = "777" }, new Para { Key1 = 2, Key2 = 3, Data = "888" }, new Para { Key1 = 3, Key2 = 4, Data = "999" } };
Para[] seq2 = new[] { new Para { Key1 = 1, Key2 = 2, Data = "777" }, new Para { Key1 = 2, Key2 = 3, Data = "888" }, new Para { Key1 = 3, Key2 = 5, Data = "999" } };
, เจ เจคเฉ เจชเฉเจฐเจพ เจเจฟเจธเจฎ เจจเฉเฉฐ เจเจธ เจคเจฐเฉเจนเจพเจ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจเฉเจคเจพ เจเจฟเจ เจนเฉ:
เจชเฉเจฐเจพ เจเจพเจเจช เจชเจฐเจฟเจญเจพเจธเจผเจพ
class Para
{
public int Key1, Key2;
public string Data;
}
เจเจธ เจคเจฐเฉเจนเจพเจ, เจ เจธเฉเจ MS SQL เจธเจฐเจตเจฐ เจฒเจ LINQ เจชเฉเฉฑเจเจเจฟเฉฑเจเจพเจ เจจเฉเฉฐ เจ เจจเฉเจเฉเจฒ เจฌเจฃเจพเจเจฃ เจฒเจ เจเฉเจ เจชเจนเจฟเจฒเฉเจเจ เจฆเฉ เจเจพเจเจ เจเฉเจคเฉเฅค
เจฌเจฆเจเจฟเจธเจฎเจคเฉ เจจเจพเจฒ, เจเฉฑเจฅเฉเจ เจคเฉฑเจ เจเจฟ เจคเจเจฐเจฌเฉเจเจพเจฐ เจ เจคเฉ เจฎเฉเจนเจฐเฉ .NET เจกเจฟเจตเฉเจฒเจชเจฐ เจเจน เจญเฉเฉฑเจฒ เจเจพเจเจฆเฉ เจนเจจ เจเจฟ เจเจนเจจเจพเจ เจจเฉเฉฐ เจเจน เจธเจฎเจเจฃ เจฆเฉ เจฒเฉเฉ เจนเฉ เจเจฟ เจเจน เจเฉ เจจเจฟเจฐเจฆเฉเจธเจผ เจตเจฐเจคเจฆเฉ เจนเจจ เจเจน เจชเจฐเจฆเฉ เจฆเฉ เจชเจฟเฉฑเจเฉ เจเฉ เจเจฐเจฆเฉ เจนเจจเฅค เจจเจนเฉเจ เจคเจพเจ, เจเจน เจธเฉฐเจฐเจเจจเจพเจเจพเจฐ เจฌเจฃ เจเจพเจเจฆเฉ เจนเจจ เจ เจคเฉ เจธเจพเจซเจเจตเฉเจ เจฐ เจนเฉฑเจฒ เจจเฉเฉฐ เจธเจเฉเจฒ เจเจฐเจจ เจตเฉเจฒเฉ เจ เจคเฉ เจฌเจพเจนเจฐเฉ เจตเจพเจคเจพเจตเจฐเจฃ เจฆเฉเจเจ เจธเจฅเจฟเจคเฉเจเจ เจตเจฟเฉฑเจ เจฎเจพเจฎเฉเจฒเฉ เจคเจฌเจฆเฉเจฒเฉเจเจ เจฆเฉ เจจเจพเจฒ เจญเจตเจฟเฉฑเจ เจตเจฟเฉฑเจ เจเฉฑเจ เจเจพเจเจฎ เจฌเฉฐเจฌ เจฒเจเจพ เจธเจเจฆเฉ เจนเจจเฅค
เจเฉฑเจ เจธเฉฐเจเฉเจช เจธเจฎเฉเจเจฟเจ เจตเฉ เจเฉเจคเฉ เจเจ
เจเฉเจธเจ เจฒเจ เจธเจฐเฉเจค - เจชเฉเจฐเฉเจเฉเจเจ เจเฉเจฆ, เจเฉเจธเจ เจกเฉเจเจพเจฌเฉเจธ เจตเจฟเฉฑเจ เจเฉเจฌเจฒเจพเจ เจฆเฉ เจฐเจเจจเจพ, เจ
เจคเฉ เจจเจพเจฒ เจนเฉ เจเจนเจจเจพเจ เจเฉเจฌเจฒเจพเจ เจจเฉเฉฐ เจกเฉเจเจพ เจจเจพเจฒ เจญเจฐเจจเจพ เจธเจฅเจฟเจค เจนเฉ
เจเจธ เจฐเจฟเจชเฉเจเจผเจเจฐเฉ เจตเจฟเฉฑเจ, เจชเจฒเจพเจจ เจซเฉเจฒเจกเจฐ เจตเจฟเฉฑเจ, OR เจธเจผเจฐเจคเจพเจ เจจเจพเจฒ เจชเฉเฉฑเจเจเจฟเฉฑเจเจพเจ เจจเฉเฉฐ เจเจฒเจพเจเจฃ เจฒเจ เจฏเฉเจเจจเจพเจตเจพเจ เจนเจจเฅค
เจธเจฐเฉเจค: www.habr.com