我正在尝试找到一种很好的方法来让我的所有查找在一次DB trip中填充下拉列表,并使用泛型,这样我就不必创建一堆自定义类。我希望避免创建一堆自定义类,如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();
}
如果我能让最后一个工作,那么我将拥有两个世界的最好的,一个DB trip和一个通用的解决方案。
我也尝试过Dictionary
,但我总是遇到序列化问题。我正在开发的应用程序很旧,所以它使用Linq to SQL而不是Entity Framework。
那么,有没有一种方法可以在不创建一堆类的情况下做到这一点,最好是内置到C#/.NET中的使用泛型的类,并允许我一次获得多个结果集?
发布于 2019-04-10 04:09:12
如果您创建了自己的泛型配对类,则可以使用它。我创建了一个具有Value1
和Value2
属性的文件,但如果愿意,您也可以创建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();
https://stackoverflow.com/questions/55599907
复制相似问题