我正在嘗試找到一種好方法來獲取我在一次數據庫旅行中填充下拉列表的所有查找并使用泛型,這樣我就不必創建一堆自定義類。我想避免創建一堆自定義類,例如Class IntStringPair, Class StringStringPair,Class StringIntPair等。我知道 C# 有 KeyValuePair 所以我嘗試使用它,但它拋出異常:'System.Collections.Generic.KeyValuePair[System.Int32,System.String]' must declare a default (parameterless) constructor in order to be constructed during mapping.'我看到這篇文章:KeyValuePair - no parameterless constructor?但奇怪的是,如果我只打一張表,它就可以工作,但如果我IMultipleResults從存儲過程中使用,它就會失敗。所以這有效:using (MyDataContext db = new MyDataContext(Config.CoreDBConnectionString)){ return db.MyTable.Select(p => new KeyValuePair<string, string>(p.Field1, p.Field2)).ToList();}但這失敗了:using (MyDataContext db = new MyDataContext(Config.CoreDBConnectionString)){ System.Data.Linq.IMultipleResults r = db.GetLookups(); return r.GetResult<KeyValuePair<int,string>>().ToList();}如果我能讓這最后一個工作,那么我將兩全其美,一次數據庫旅行和一個通用的解決方案。我也試過Dictionary,但我總是遇到序列化問題。我正在處理的應用程序很舊,所以它使用 Linq to SQL 而不是 Entity Framework。那么有沒有一種方法可以在不創建一堆類的情況下做到這一點,最好是 C#/.NET 中內置的使用泛型并允許我在一次旅行中獲得多個結果集的東西?
1 回答

倚天杖
TA貢獻1828條經驗 獲得超3個贊
如果您創建自己的通用對類,則可以使用它。我用Value1andValue2屬性創建了一個,但如果愿意,您可以創建Key/Value代替:
public class DBPair<T1, T2> {
T1 v1;
T2 v2;
public DBPair() {
}
public DBPair(T1 v1, T2 v2) {
this.v1 = v1;
this.v2 = v2;
}
public T1 Value1
{
get; set;
}
public T2 Value2
{
get; set;
}
}
注意:如果您需要 的某些其他功能KeyValuePair,例如成員相等性測試或哈希碼生成,您將需要添加這些方法,或KeyValuePair在檢索后將結果傳輸到新的。
然后你可以像這樣使用它:
using (MyDataContext db = new MyDataContext(Config.CoreDBConnectionString))
return db.GetLookups().GetResult<DBPair<int,string>>().ToList();
- 1 回答
- 0 關注
- 93 瀏覽
添加回答
舉報
0/150
提交
取消