在 C# Web 表单中,如何使用泛型类型从数据集中加载列表?

     2023-04-12     279

关键词:

【中文标题】在 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)] 查看详情