亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

由于無參數構造函數,使用 IMultipleResults 從存儲過程填充

由于無參數構造函數,使用 IMultipleResults 從存儲過程填充

C#
Cats萌萌 2022-12-04 10:55:55
我正在嘗試找到一種好方法來獲取我在一次數據庫旅行中填充下拉列表的所有查找并使用泛型,這樣我就不必創建一堆自定義類。我想避免創建一堆自定義類,例如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();


查看完整回答
反對 回復 2022-12-04
  • 1 回答
  • 0 關注
  • 93 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號