我试图了解如何正确传递参数,更重要的是,返回一个或多个值。
在主要方法中,我有:
public IActionResult FinVD()
{
var user = from d in _context.Roles
join userRole in _context.UserRoles on d.Id equals userRole.RoleId
join usuario in _context.Users on userRole.UserId equals usuario.Id
where usuario.UserName == User.Identity.Name
select d;
var cargo = user.FirstOrDefault();
var cargodesc = cargo.Name;
ListaTienda(cargodesc);
//...More code
FinanzaDIndexData ventadiaria = new FinanzaDIndexData()
{
MedioPagos = medio_pago,
hechosf_periodo = fecha,
//Here lies the problem. Is not initialized in the context if the code stays like this.
HechosFinanzaL = ListaHechosFinanza,
};
return View(ventadiaria);
}
将此参数传递给ListaTienda将执行以下操作:
生成列表
private void ListaTienda(string cargodesc)
{
if (cargodesc == "Jefe")
{
List<Tienda> ListaTienda = new List<Tienda>();
ListaTienda = _context.Stores.Where(j => j.Districts.Provincias.provincia_jefe == User.Identity.Name && j.tienda_vigencia_reg == 1).OrderBy(j => j.tienda_nombre).ToList();
ListaTienda.Insert(0, new Tienda { tienda_id = 0, tienda_nombre = "-- Seleccione Tienda --" });
ViewBag.ListaTienda = ListaTienda;
List<HechosFinanza> ListaHechosFinanza = new List<HechosFinanza>();
ListaHechosFinanza = _context.HechosFinanza.Include(f => f.Devices).ThenInclude(f => f.Machines).ThenInclude(f => f.Stores).ThenInclude(f => f.Districts).ThenInclude(f => f.Provincias)
.Where(f => f.finanzas_id == 1 &&
f.Devices.Machines.Stores.Districts.Provincias.provincia_jefe == User.Identity.Name)
.OrderBy(f => f.Devices.Machines.Stores.tienda_nombre).ToList();
//...more code
}
}
问题:
当我回到main方法时,我有一个列表等待填充ListaHechosFinanza
的结果,但是我得到消息:
名称'ListaHechosFinanza'在实际上下文中不存在
我是否必须在main方法中声明一个空的List<HechosFinanza>
,将其作为参数传递并使用ref
进行修改?还是没有它,因为是列表?这样吗?:
public IActionResult FinVD()
{
var user = from d in _context.Roles
join userRole in _context.UserRoles on d.Id equals userRole.RoleId
join usuario in _context.Users on userRole.UserId equals usuario.Id
where usuario.UserName == User.Identity.Name
select d;
var cargo = user.FirstOrDefault();
var cargodesc = cargo.Name;
List<HechosFinanza> ListaHechosFinanza = new List<HechosFinanza>();
ListaTienda(cargodesc, ListaHechosFinanza);
//... more code
FinanzaDIndexData ventadiaria = new FinanzaDIndexData()
{
MedioPagos = medio_pago,
hechosf_periodo = fecha,
HechosFinanzaL = ListaHechosFinanza,
};
return View(ventadiaria);
}
第2部分:
private void ListaTienda(string cargodesc, List<HechosFinanza> ListaHechosFinanza)
{
if (cargodesc == "Jefe")
{
List<Tienda> ListaTienda = new List<Tienda>();
ListaTienda = _context.Stores.Where(j => j.Districts.Provincias.provincia_jefe == User.Identity.Name && j.tienda_vigencia_reg == 1).OrderBy(j => j.tienda_nombre).ToList();
ListaTienda.Insert(0, new Tienda { tienda_id = 0, tienda_nombre = "-- Seleccione Tienda --" });
ViewBag.ListaTienda = ListaTienda;
//List<HechosFinanza> ListaHechosFinanza = new List<HechosFinanza>();
ListaHechosFinanza = _context.HechosFinanza.Include(f => f.Devices).ThenInclude(f => f.Machines).ThenInclude(f => f.Stores).ThenInclude(f => f.Districts).ThenInclude(f => f.Provincias)
.Where(f => f.finanzas_id == 1 &&
f.Devices.Machines.Stores.Districts.Provincias.provincia_jefe == User.Identity.Name)
.OrderBy(f => f.Devices.Machines.Stores.tienda_nombre).ToList();
}
答案 0 :(得分:0)
ListaTienda()
方法需要返回HechosFinanza的列表。
因此将其更改为
private IList<HechosFinanza> ListaTienda(string cargodesc, List<HechosFinanza> ListaHechosFinanza)
此外,由于此方法现在返回一个值,因此需要将其值分配给ListaHechosFinanza
中的FinVD()
,如下所示:
IList<HechosFinanza> ListaHechosFinanza = ListaTienda(cargodesc, ListaHechosFinanza);
此错误消息表示ListaHechosFinanza
方法对变量ListaTienda
不可见,因为这是局部变量。
The name 'ListaHechosFinanza' does not exist in the actual context
前往MSDN了解变量的范围,这是数据共享和访问的关键。
此外,请始终编写接口代码,而不是实现代码。更多信息在这里-What does it mean to "program to an interface"?