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