두 테이블이 TableA
및 TableB
이고 PK-FK 관계가 있다고 가정하면이 두 테이블을 extension method
에서 join
으로 작성하고 데이터를 가져 왔습니다. 이 확장 메소드는 매우 구체적이며 이러한 매우 2 개의 테이블에 대한 작업을 완료합니다.일반 사용자 정의 조인 확장 메서드
두 테이블을 조인하기 위해 GENERIC 확장 메서드를 만들고 데이터를 투영하려면 어떻게해야합니까?
내 코드 : TableA
의
스키마 : TableB
의
CREATE TABLE [dbo].[TableA](
[Id_1] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](max) NULL,
[Address] [nvarchar](max) NULL,
PRIMARY KEY CLUSTERED
(
[Id_1] ASC
)
스키마 :
CREATE TABLE [dbo].[TableB](
[Id_2] [int] IDENTITY(1,1) NOT NULL,
[Name2] [nvarchar](max) NULL,
[Address2] [nvarchar](max) NULL,
[FK_Id] [int] NULL,
PRIMARY KEY CLUSTERED
(
[Id_2] ASC
)
ALTER TABLE [dbo].[TableB] WITH CHECK ADD FOREIGN KEY([FK_Id])
REFERENCES [dbo].[TableA] ([Id_1])
C# 코드 :
public class ABDTO
{
public TableA A { get; set; }
public TableB B { get; set; }
}
public static class Helper
{
public static IEnumerable<ABDTO> Join(this IEnumerable<TableA> tableA,IEnumerable<TableB> tableB)
{
return tableA.Join(tableB,x => x.Id_1,y => y.FK_Id,
(x, y) =>new ABDTO
{
A = x,
B = y
});
}
public class Program
{
static void Main(string[] args)
{
Operation1();
Console.ReadLine();
}
public static void Operation1()
{
using (var db = new SampleEntities())
{
var result = db.TableAs.Join(db.TableBs);
foreach(var item in result)
{
Console.WriteLine("{0}; {1} ||| {2} ; {3}", item.A.Id_1, item.A.Name, item.B.Id_2, item.B.Name2);
}
}
}
}
그래서, Join()
은 extension method
이며 TableA
및 TableB
을 가져와 PK-FK 관계에 추가하고 선택자를 투사합니다.
가 어떻게 같은 뭔가 generic
쓸 수 있습니다 : 나는 LINQ
과 Extension methods
에서 아주 좋은 아니에요
public static IEnumerable<T> Join(this IEnumerable<T> Ta, IEnumerable<T> Tb)
{
return Ta.Join(Tb, x => Ta.SomeColumn1, y => Tb.SomeColumn2,
(x, y) => Projection of columns);
}
을 도와주세요. 모든 포인터도 도움이 될 것입니다.
매개 변수로 열 이름을 수락 하시겠습니까? Func <> delegate를 'Join'메서드의 매개 변수로 사용하면 호출 코드에서 조인에 사용할 열을 제공 할 수 있으므로 'Join'확장명에 하드 코드 할 필요가 없습니다. –
@ SIva Gopal ... 나는 너를 올바르게 가지 않는다. 더 설명해 줄 수 있니? – DevAssasin
"결합 가능한"열을 발견하는 자동화 된 방법을 찾고있는 것으로 보입니다. 문제는 : 자동화 된 절차가 당신이 원하는 것을 어떻게 알 수 있습니까? 이름 관습에 따라 (동등한 이름)? –