2つのテーブルTableA
とTableB
の間にPK-FKの関係があり、これらの2つのテーブルをextension method
〜join
と書いてデータをフェッチしたとします。この拡張メソッドは非常に特殊なものであり、非常に2つのテーブルで作業が完了します。一般的なカスタム結合拡張メソッド
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 <>デリゲートを 'Join'メソッドのパラメータとして使用している場合は、コーリングコードから結合に使用する列を指定することができます。したがって、 'Join'拡張内でハードコーディングする必要はありません。 –
@ SIva Gopal ...私はあなたを正しく取得していません。もっと説明できますか? – DevAssasin
"結合可能な"列を自動検出する方法を探しているようです。問題は、どの自動化されたプロシージャがあなたが参加したいことを知っているのでしょうか?名前の慣習(等名)だけで? –