Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 简洁的问题。从返回的对象获取值_Asp.net_Object_Dapper - Fatal编程技术网

Asp.net 简洁的问题。从返回的对象获取值

Asp.net 简洁的问题。从返回的对象获取值,asp.net,object,dapper,Asp.net,Object,Dapper,刚开始学习整洁。我有ADO.NET的背景。使用我下载的演示,我可以在MySql表中插入/删除webform中的数据。然而,我整个上午都在寻找这个 在按ID从db检索一行时,它不会返回列表,它似乎只是一个对象(使用我下载的演示中的代码)。查询成功后,我将返回对象。它有字段:“ProductID、Description和Price” 我唯一能得到这三个字段值的方法是: System.Reflection.PropertyInfo pi = Product.GetType().GetProperty(

刚开始学习整洁。我有ADO.NET的背景。使用我下载的演示,我可以在MySql表中插入/删除webform中的数据。然而,我整个上午都在寻找这个

在按ID从db检索一行时,它不会返回列表,它似乎只是一个对象(使用我下载的演示中的代码)。查询成功后,我将返回对象。它有字段:“ProductID、Description和Price”

我唯一能得到这三个字段值的方法是:

System.Reflection.PropertyInfo pi = Product.GetType().GetProperty("ProductID");
System.Reflection.PropertyInfo desc = Product.GetType().GetProperty("Description");
System.Reflection.PropertyInfo price = Product.GetType().GetProperty("Price");

int _ProductID = (int)(pi.GetValue(Product, null));
string _Description = (string)(desc.GetValue(Product, null));
decimal _Price = (decimal)(price.GetValue(Product, null));
这将起作用,并为这三个字段获取正确的值

我习惯于在数据表中循环,但我认为可能有更好的方法来获取这些值

这是正确的方法还是我遗漏了什么?实际上,我整个上午都在阅读文档,并在询问之前把它弄得一团糟

我看到的一些东西似乎非常复杂。我认为Dapper应该简化事情。

查询
API返回一个
IEnumerable
,它通常是一个
列表
AsList()
扩展方法可以将其返回到列表,而无需复制,但无论哪种方式:它们只是
T
,用于您要求的任何
T
。如果您询问
查询
,则:它们应该是
产品
实例:

var results=connection.Query(someSql,someArgs);//也许吧。AsList()
foreach(结果中的产品obj){//“var obj”在这里也可以
//现在只需使用obj.ProductID、obj.Description和obj.Price
}
如果不起作用:检查您是否使用了
查询的
版本。还有一个非泛型变量,它返回
dynamic
。坦率地说,您几乎应该始终使用
版本

注意:我假设在某个地方你有

类产品{
public int ProductID{get;set;}
公共字符串说明{get;set;}
公共十进制价格{get;set;}
}

好的,谢谢你,马克。对于我来说,很难看到整洁的类文件中应该包含什么,以及代码背后应该包含什么。按ID获取产品的原始演示方法的查询为.FirstOrDefault()

我改变了一切,以返回一个列表,这一切都起了作用。我确信我的ADO.NET正在显示,但这是可行的。在Dapper类文件中:

 public List<Product> ProductAsList(int Id)
        {
            return this._db.Query<Product>("SELECT * FROM Cart_product WHERE ProductID=@Id", new { Id = Id }).**ToList()**;
        }
//使用Dapper ProductAsList(ProductId)返回该行

//循环浏览列表并获取每个项目的值:

        foreach (Product obj in results)
        {
            _ProductId = obj.ProductID;
            Description = obj.Description;
            Price = obj.Price;
        }
//使用Dapper将所选产品插入购物车(表):

它确实从一个表中查找产品,并将所选项目插入另一个表中


再次感谢

这是在我整洁的类文件中,还是在我试图获取结果的页面的代码中?在我得到的演示中,有些东西作为列表返回,但不是全部。GetProductByID不是列表。这是代码的简洁部分:公共产品ProductById(int-Id){返回它。_db.Query(“从购物车中选择*产品,其中ProductID=@Id”,new{Id=Id})。FirstOrDefault();}这是我的网络表单代码:object Product=new object();Product=cartservice.ProductById(转换为32(ProductId));返回的对象表示它不是IEnumerable。你是说我应该把所有的东西都列出来?这就是我得到的演示如何从表中获取所有产品:public List GetAllProducts()。但在获取一行时,它返回的只是一个对象:publicproductbyid(intid)@user1544428它实际上是一个
IEnumerable
;资料来源:我写的。如果您在顶部使用LINQ(First(),等等),那么是的,这将重塑它;便宜得多这里解释的是什么。。。
        int _ProductId = 0;
        string Description = string.Empty;
        decimal Price = 0;
        foreach (Product obj in results)
        {
            _ProductId = obj.ProductID;
            Description = obj.Description;
            Price = obj.Price;
        }
        String UserName = "jbanks";

        cartitem = new CartItem();
        cartitem.ProductID = _ProductId;
        cartitem.Quantity = 1;
        cartitem.Description = Description;
        cartitem.Price = Price;
        cartitem.Created = DateTime.Now;
        cartitem.CreatedBy = UserName;
        result = cartservice.AddCartItem(cartitem);

        if (result)
        {
            lblMessage.Text = string.Empty;
            lblMessage.Text = "Successfully added a cart item";
        }
    }


}