使用Subsonic.Select()ExecuteTypedListMethodWithString这是一个关于泛型的问题,而不是subsonic:想象一下,如果您有以下代码:Listresult=DB.Select(Product.Columns.Id)。从().ExecuteTypedList();这很好用,并返回一个通用列表,其中包含我的Product表中的ID。但是,如果我想获得ProductName的列表:Listresult=DB.Select(Product.Columns.ProductName).From().ExecuteTypedList();它抛出一条编译器消息(从德语翻译):“字符串”必须是非抽象类型,它有一个没有参数的公共构造函数,用作泛型类型或泛型方法“SubSonic.SqlQuery.ExecuteTypedList(”中的参数“T”)'。原因:字符串没有空构造函数:inti=newint;//有效Strings=newString;//编译器错误:“string”不包含采用“0”参数的构造函数,如果我使用List而不是它可以工作,但是有没有更优雅的方法,我可以使用List吗?更新:列表不起作用。我确实得到了一个对象列表,但这似乎是一个“空”对象,不包含我的ProductNames(object.ToString()返回{Object})有点dotnet魔法,无需修补亚音速代码就可以实现。创建一个新类SubsonicSqlQueryExtensionMethods并删除此代码:usingSystem;使用System.Collections.Generic;使用System.Linq;使用系统文本;使用亚音速;namespaceMyUtil.ExtensionMethods{publicstaticclassSubSonicSqlQueryExtensionMethods{publicstaticQulTypedListExec(qry){Listlist=newList();foreach(System.Data.DataRowrowinqry.ExecuteDataSet().Tables[0].Rows){list.Add((String)row[0]);}返回列表;现在将MyUtil.ExtensionMethods的引用添加到您的类中:usingMyUtil.ExtensionMethods;最后这个工作:Listresult=DB.Select(User.Columns.Name).From().ExecuteTypedList();注意,上面的扩展方法在没有类型参数的情况下重载了ExecuteTypedList()方法(不幸的是,这段代码需要dotnet3.5,但对我来说它有效)我知道我来晚了,但我找到了一个巧妙的方法来“作弊”的问题。列表结果=DB.Select().From().ExecuteTypedList().Select(p=>p.ProductName).ToList();这对我来说就像一个魅力。希望这能帮助某个地方的人,因为我相信你已经解决了这个问题。好吧,我能想到这个,但它并不更优雅:它看起来不像SubSonic对具有字符串值的ExecuteTypedList有适当的支持。构建列表的方法首先查找SubSonic类型,如果没有匹配检查,则查看T是否为值类型。由于字符串不是值类型,它会尝试将属性名称与最后一个条件返回的列名称相匹配。这失败了,因为字符串没有要分配给的属性名称。参见:BuildTypedResult方法:http://subsonicproject.googlecode.com/svn/trunk/SubSonic/SqlQuery/SqlQuery.cs以上就是C#学习教程:使用Subsonic.Select()ExecuteTypedList方法与String共享的全部内容,如果是对你有用,需要了解更多的C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
