我正在尝试执行一个带两个参数并返回结果列表的SQL Server存储过程。该应用程序将返回结果,但是我不确定如何将值分配给模型中的列表。正在使用的ORM是Dapper。这是我的代码
string startTime = "2018-04-17 00:00:00.000";
string endTime = "2018-04-17 23:59:59.997";
string db = "database";
List<ShelfInventoryModel> output = new List<ShelfInventoryModel>();
using (IDbConnection connection = new System.Data.SqlClient.SqlConnection(SqlConnection.CnnString(db)))
{
DataTable dt = new DataTable();
var p = new DynamicParameters();
p.Add("@StartDate", startTime);
p.Add("@EndDate", endTime);
output = connection.Query<ShelfInventoryModel>("dbo.spGetInventory_Liquor", p, commandType: CommandType.StoredProcedure).ToList();
Console.WriteLine(output);
Console.ReadLine();
}
这是模型类
public class ShelfInventoryModel
{
public decimal Quantity { get; set; }
public string ItemName { get; set; }
}
我了解需要将结果填充到潜在的数据适配器中。但是,当我尝试将输出填充到数据适配器时,系统给我一个错误
将结果返回到控制台的目的。但是,此时控制台仅显示:
System.Collections.Generic.List`1 [ProcedureTest.ShelfInventoryModel]
答案 0 :(得分:2)
Console.WriteLine(output);
将仅在参数上显示ToString的结果,此类型将恢复为默认实现,该默认实现仅显示output
对象的类型名称。您需要使用foreach
遍历列表中的项目:
foreach (var item in output)
{
Console.WriteLine(item);
}
这将导致您仅给出该对象的类型而获得一行行。因此,您可以为您的对象编写ToString的实现,也可以只显示要查看的位...
foreach (var item in output)
{
Console.WriteLine($"{item.ItemName} {item.Quantity}");
}
答案 1 :(得分:0)
您可以使用此:
string startTime = "2018-04-17 00:00:00.000";
string endTime = "2018-04-17 23:59:59.997";
string db = "database";
List<ShelfInventoryModel> output = new List<ShelfInventoryModel>();
using (IDbConnection connection = new System.Data.SqlClient.SqlConnection(SqlConnection.CnnString(db)))
{
DataTable dt = new DataTable();
var p = new DynamicParameters();
p.Add("@StartDate", startTime);
p.Add("@EndDate", endTime);
output = connection.Query<ShelfInventoryModel>("dbo.spGetInventory_Liquor", p, commandType: CommandType.StoredProcedure).ToList();
foreach (ShelfInventoryModel item in output)
{
Console.WriteLine(item.Quantity.ToString());
Console.WriteLine(item.ItemName);
}
}
答案 2 :(得分:0)
以下是工作代码,以便应用程序将结果列表返回到控制台
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation{
if ([annotation isKindOfClass:[MKPointAnnotation class]]){
MKAnnotationView *pinView = (MKAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:@"CustomPinAnnotationView"];
if(!pinView){
pinView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"CustomPinAnnotationView"];
pinView.canShowCallout = YES;
pinView.image = [UIImage imageNamed:@"Annotation"];
pinView.calloutOffset = CGPointMake(0, 0);
}
else{
pinView.annotation = annotation;
}
return pinView;
} else if ([annotation isKindOfClass:[SecondAnnotation class]]){
MKAnnotationView *pinView = (MKAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:@"CustomPinAnnotationView"];
if(!pinView){
pinView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"CustomPinAnnotationView"];
pinView.canShowCallout = YES;
pinView.image = [UIImage imageNamed:@"Second"];
pinView.calloutOffset = CGPointMake(0, 0);
}
else{
pinView.annotation = annotation;
}
return pinView;
}
return nil;
}