关键词:
【中文标题】在 C# Web 表单中,如何使用泛型类型从数据集中加载列表?【英文标题】:In C# web forms, how can I load a List from a dataset using generic types? 【发布时间】:2016-09-30 00:35:32 【问题描述】:我正在尝试将数据集中的内容映射到列表中,但我希望能够将类型传递给函数。我已经有以下代码:
public class WorkOrderAttachment : DatabaseObject
[TableData]
//public List<int> attachment_id get; set;
public int attachment_id get; set;
[TableData]
//public List<int> wo_id get; set;
public int wo_id get; set;
public WorkOrderAttachment()
。 . .
public class DatabaseObject
private string _ConnectionString = "";
。 . .
public static List<T> LoadDataAll<T>(T type, DataSet ds)
List<T> fillList = new List<T>();
if (ds.Tables[0].Rows.Count > 0)
foreach (DataRow dr in ds.Tables[0].Rows)
foreach (var prop in type.GetType().GetProperties())
if (prop.GetCustomAttributes(typeof(TableData), false).Length > 0 && ds.Tables[0].Columns.Contains(prop.Name.ToLower()))
if (dr[prop.Name.ToLower()] != DBNull.Value)
prop.SetValue(type, Convert.ChangeType(dr[prop.Name.ToLower()], prop.PropertyType), null);
else
// If we are using a string and the value is null, default to an empty string instead
if (prop.PropertyType == typeof(String))
if (dr[prop.Name.ToLower()] == DBNull.Value)
prop.SetValue(type, "", null);
fillList.Add(type);
return fillList;
。 . .
我是这样使用它的:
return DatabaseObject.LoadDataAll<WorkOrderAttachment>(new WorkOrderAttachment(), ds);
这可行,但假设数据集中的表中有两行。第一次循环时,它会到达 fullList.Add(type) 并将数据放在应有的位置。 "attachment_id = 1, wo_id = 1000"
但是,下一次循环时,它会设置“attachment_id = 2, wo_id = 1000”。一切看起来都很好,但事实并非如此。当我检查填充列表时,我发现了两个条目,但它们都是重复的最后一项“attachment_id = 2,wo_id = 1000”。第一个实例(我知道它已经到位)被覆盖,因为它是通过引用处理的方式,我猜。
(我不想在这种情况下使用实体框架或其他 ORM,但其他将数据从数据集中取出到列表中的选项将不胜感激。)
我希望能够指定这样的内容(伪代码):
List<WorkOrderAttachment> Attachments = DatabaseResult();
但是,我还希望它是通用的,这样我就可以将任何类型放入 DatabaseResult 并将我的响应作为已经加载数据的列表。任何有关如何解决此问题或实施更好解决方案的建议表示赞赏。
【问题讨论】:
【参考方案1】:我在 *** 的另一个问题中找到了答案,即使我的问题与这个不同。答案是一样的:In C#, how to instantiate a passed generic type inside a method?
public static List<T> LoadDataAll<T>(DataSet ds) where T : new()
。 . .
foreach (DataRow dr in ds.Tables[0].Rows)
T type = new T();
foreach (var prop in type.GetType().GetProperties())
。 . .
使用 where T : new() 语法,我可以为每一行创建一个新类型,并将其传递给返回的 fillList。我对这个方法的使用如下:
return DatabaseObject.LoadDataAll<WorkOrderAttachment>(ds);
返回的结果是一个WorkOrderAttachment List,我只是传入数据集。
【讨论】:
如何在运行时使用 C# 创建强类型数据集?
】如何在运行时使用C#创建强类型数据集?【英文标题】:HowdoIcreatestronglytypeddatasetduringruntimeusingC#?【发布时间】:2009-05-0717:34:56【问题描述】:我需要在运行时为用户首选的目标数据库创建一个强类型数据集。VisualStudio为创建... 查看详情
如何从 C# Web 服务返回数据表/数据集作为 JSON
】如何从C#Web服务返回数据表/数据集作为JSON【英文标题】:Howtoreturndatatable/datasetfromc#webserviceasJSON【发布时间】:2010-11-2612:52:55【问题描述】:我有网络服务通过使用返回字符串作为JSON[网络方法][ScriptMethod(ResponseFormat=ResponseForma... 查看详情
你可以在 C# 中使用泛型表单吗?
】你可以在C#中使用泛型表单吗?【英文标题】:CanyouusegenericformsinC#?【发布时间】:2021-05-1709:28:04【问题描述】:您应该能够创建通用表单:publicpartialclassMyGenericForm<T>:FormwhereT:class/*formcode*/publicList<T>TypedListget;set;是有... 查看详情
你可以在 C# 中使用泛型表单吗?
】你可以在C#中使用泛型表单吗?【英文标题】:CanyouusegenericformsinC#?【发布时间】:2008-08-1411:30:54【问题描述】:您应该能够创建通用表单:publicpartialclassMyGenericForm<T>:FormwhereT:class/*formcode*/publicList<T>TypedListget;set;是有... 查看详情
如何在 C# 中对泛型类型指定多个约束?
】如何在C#中对泛型类型指定多个约束?【英文标题】:HowdoIspecifymultipleconstraintsonagenerictypeinC#?【发布时间】:2010-09-0723:08:51【问题描述】:对多种类型设置约束的语法是什么?基本示例:classAnimal<SpeciesType>whereSpeciesType:Speci... 查看详情
如何从 C# 中的泛型类型数组中选择一组随机值?
】如何从C#中的泛型类型数组中选择一组随机值?【英文标题】:HowtopicksetnumberofrandomvaluesfromagenerictypearrayinC#?【发布时间】:2020-05-2208:38:18【问题描述】:我想从泛型类型数组中选择一组随机值(比如说2个值)。我设法实现了... 查看详情
如何在 C# 中将数据集加载到 libsvm 中
】如何在C#中将数据集加载到libsvm中【英文标题】:howtoloaddatasetintolibsvminC#【发布时间】:2012-09-2709:57:12【问题描述】:我已经从Libsvm下载了C#中的SVM,但是我不知道在哪里加载我的数据进行分类,我想知道如何将数据集加载到SV... 查看详情
c#实体类中如何定义泛型集合类型的属性
我的分页类中有个属性是存放数据集的,我希望以后的数据集都是List<T>的形式,所以我定义了一个PublicList<T>XXX的属性,但是报错,说找不到T这个类型或namespace。那我应该怎么定义这个泛型集合的属性呢,是用List<obje... 查看详情
如何使用 Java、AJAX 使用 Rest Web 服务从 MySQL 数据库中检索数据并放置在 HTML 表单中
...a、AJAX使用RestWeb服务从MySQL数据库中检索数据并放置在HTML表单中【英文标题】:HowtoretrievedatafromMySQLdatabaseandplaceinaHTMLFormusingRestWebServicesusingJava,AJAX【发布时间】:2018-09-0501:37:40【问题描述】:我正在尝试从MySQL数据库中检索用户... 查看详情
在 C# 4.0 中,是不是可以从泛型类型参数派生类?
】在C#4.0中,是不是可以从泛型类型参数派生类?【英文标题】:InC#4.0,isitpossibletoderiveaclassfromagenerictypeparameter?在C#4.0中,是否可以从泛型类型参数派生类?【发布时间】:2011-08-1822:20:39【问题描述】:我一直在尝试这个,但我... 查看详情
使用 C# 查询存储在属性中的 XML 值并导入数据集
】使用C#查询存储在属性中的XML值并导入数据集【英文标题】:QueryXMLvaluesstoredinattributes&importintodatasetusingC#【发布时间】:2019-09-1604:12:41【问题描述】:我是C#的新手,并且是解析xml的新手。我有一个从Web服务获取的xml流,它... 查看详情
为啥我不能在 C# 应用程序中使用泛型类型作为入口点?
】为啥我不能在C#应用程序中使用泛型类型作为入口点?【英文标题】:WhyIcannotuseasentrypointinC#appagenerictype?为什么我不能在C#应用程序中使用泛型类型作为入口点?【发布时间】:2015-03-1817:10:15【问题描述】:在C#中,方法Main必... 查看详情
c#之泛型
...的。读完本篇文章,你会对泛型有更深的了解。为什么要使用泛型为了了解这个问题,我们先 查看详情
在 C# 中使用枚举作为泛型类型参数 [重复]
】在C#中使用枚举作为泛型类型参数[重复]【英文标题】:UsingenumasgenerictypeparameterinC#[duplicate]【发布时间】:2011-06-2210:27:37【问题描述】:可能重复:EnumtypeconstraintsinC#是否可以通过使用其包装类Enum将enum类型用作泛型参数?我有... 查看详情
如何使用动态数量的数据条目初始化表单集
】如何使用动态数量的数据条目初始化表单集【英文标题】:howtoinitializeaformsetwithdynamicnumberofdataentries【发布时间】:2012-07-0312:48:22【问题描述】:只有当我在运行我的代码之前知道数组中的元素数(此代码为12)时,我才能用... 查看详情
如何从 django 的表单中获取数据?
】如何从django的表单中获取数据?【英文标题】:Howtogetadatafromformindjango?【发布时间】:2017-12-3113:10:44【问题描述】:我的模板django中有一个可以的表单,它可以保存在模型中。好吧,现在,我想在这个表单中创建一个新表单。... 查看详情
如何在 C# 的泛型中使用扩展
】如何在C#的泛型中使用扩展【英文标题】:HowtouseextendsingenericforC#【发布时间】:2016-01-0319:46:27【问题描述】:我是C#的新手,如何在C#中使用下面的泛型,我想要C#中的Java语句,List<?extendsMySuperClass>list=newArrayList<MySubClass&... 查看详情
如何在 c# core web 中使用 IMAGE 类型字段
】如何在c#coreweb中使用IMAGE类型字段【英文标题】:howcanIuseIMAGEtypefieldinc#coreweb【发布时间】:2021-12-0821:06:45【问题描述】:MsSQLCREATETABLE[dbo].[Employees](...[Photo]IMAGENULL,...);如何使用[显示名称..c#(xxrow.cs)[DisplayName("Photo"),Size(1073741823)] 查看详情