首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >由于无参数构造函数,使用IMultipleResults从存储过程填充KeyValuePair失败

由于无参数构造函数,使用IMultipleResults从存储过程填充KeyValuePair失败
EN

Stack Overflow用户
提问于 2019-04-10 03:25:24
回答 1查看 52关注 0票数 0

我正在尝试找到一种很好的方法来让我的所有查找在一次DB trip中填充下拉列表,并使用泛型,这样我就不必创建一堆自定义类。我希望避免创建一堆自定义类,如Class IntStringPairClass StringStringPairClass 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,它就会失败。

所以这是可行的:

代码语言:javascript
复制
using (MyDataContext db = new MyDataContext(Config.CoreDBConnectionString))
{
    return db.MyTable.Select(p => new KeyValuePair<string, string>(p.Field1, p.Field2)).ToList();
}

但这失败了:

代码语言:javascript
复制
using (MyDataContext db = new MyDataContext(Config.CoreDBConnectionString))
{
    System.Data.Linq.IMultipleResults r = db.GetLookups();
    return r.GetResult<KeyValuePair<int,string>>().ToList();
}

如果我能让最后一个工作,那么我将拥有两个世界的最好的,一个DB trip和一个通用的解决方案。

我也尝试过Dictionary,但我总是遇到序列化问题。我正在开发的应用程序很旧,所以它使用Linq to SQL而不是Entity Framework。

那么,有没有一种方法可以在不创建一堆类的情况下做到这一点,最好是内置到C#/.NET中的使用泛型的类,并允许我一次获得多个结果集?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-10 04:09:12

如果您创建了自己的泛型配对类,则可以使用它。我创建了一个具有Value1Value2属性的文件,但如果愿意,您也可以创建Key/Value

代码语言:javascript
复制
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中。

然后你可以像这样使用它:

代码语言:javascript
复制
using (MyDataContext db = new MyDataContext(Config.CoreDBConnectionString))        
    return db.GetLookups().GetResult<DBPair<int,string>>().ToList();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55599907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档