簡體   English   中英

如何創建一個采用映射的通用列表和字符串參數的方法?

[英]How to create a method which takes generic list and string parameter with mapping?

我現在有這個 C# 工作代碼。

using (var bulk = new SqlBulkCopy(_connectionString))
{
    bulk.DestinationTableName = "Person";
    bulk.WriteToServer(DataTableHelper.ToDataTable(persons));
}

問題是上面的代碼只適用於一表一列表object。 但是我還有 3 個不同的表和不同的列表,它們使用上面的相同代碼。

例子

表名 列表 Object
地址 地址
接觸 接觸

我沒有將代碼復制 3 次,而是創建了一個帶有參數的方法。

我如何使用元組、字典或泛型來實現這一點,因為只有兩個值並且需要 map?

我嘗試了類似下面的方法,但語法無效。

var dict = new Dictionary<string, List<T>>();
dict.Add("Person", persons);
dict.Add("Address", address);
dict.Add("Contact", contact);

假設DataTableHelper.ToDataTable()可以處理Person / Address / Contact列表,一種方法是創建一個獲取對象列表和表名稱的通用方法:

void WriteToServer<T>(List<T> objects, string tableName)
{
    using (var bulk = new SqlBulkCopy(_connectionString))
    {
        bulk.DestinationTableName = tableName;
        bulk.WriteToServer(DataTableHelper.ToDataTable(objects));
    }
}

然后,您可以像這樣使用它:

WriteToServer(persons, "Person");
WriteToServer(addresses, "Address");
WriteToServer(contacts, "Contact");

如果PersonAddressContact共享相同的基本類型(基本 class 或接口),那么您應該在方法中添加一個約束:

void WriteToServer<T>(List<T> objects, string tableName) where T : ISomething

我會用一個例子來說明使用方法。例子很簡單

public class Person
{
   public int ID { get; set; }
   public string PersonName { get; set; }
}
public class Address
{
   public string PersonAddress { get; set; }
}
public class StoreDataBase<T>
{
   public static void ToDataTable(T item)
   {
       using (TestDBContext db = new TestDBContext())
       {
           db.GetTable<T>().InsertOnSubmit(item);
           db.SubmitChanges();
       }
   }
}

//for use
Person person = new Person() { ID = 1, PersonName = "Meysam" };
StoreDataBase<Person>.ToDataTable(person);

Address address = new Address() { PersonAddress = "Asia" };
StoreDataBase<Address>.ToDataTable(address);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM