我正在创建Expediente,我可以毫无问题地获取所有数据,例如Funcionario。 当我尝试将其指定为
时ex.Funcionario = funcionario as Funcionario;
让我为空 但是如果我尝试像
ex.Funcionario= db.Funcionario.Where(F => F.Email == vm.idFuncionario).Include(F => F.Grupo);
我得到一个“不能转换隐式类型”。错误。 关于如何在不丢失数据的情况下将Funcionario分配给Expediente上的属性的任何想法?
public ActionResult Create(ExpedienteCrearViewModel vm)
{
if (ModelState.IsValid)
{
Expediente ex = new Expediente();
var funcionario = db.Funcionario.Where(F => F.Email == vm.idFuncionario).Include(F => F.Grupo);
ex.Funcionario = funcionario as Funcionario;
ex.Tramite = db.Tramite.Find(vm.idTramite);
ex.Solicitante = (Solicitante)Session["solicitante"];
ex.abierto = true;
ex.FechaCreacion = DateTime.Now;
db.Expediente.Add(ex);
db.SaveChanges();
vm.Trsmites = new SelectList(db.Tramite.ToList(), "Codigo", "Titulo");
vm.Funcionarios = new SelectList(db.Funcionario.ToList(), "Email", "Nombre");
}
return View(vm);
}
这是Expediente类
public class Expediente
{
//Para que sea key y no genere identity la BD
[Key]
public int Codigo { get; set; }
[Required]
public Tramite Tramite { get; set; }
//no le pongo requiered para que no de error al crearlo sin esto
public DateTime FechaCreacion { get; set; }
//por defecto hay que ponerlo en true
public Boolean abierto { get; set; }
[Required]
public Funcionario Funcionario { get; set; }
[Required]
public Solicitante Solicitante { get; set; }
public virtual ICollection<EtapaCumplida> etapasCumplidas { get; set; }
}
答案 0 :(得分:0)
以下变量funcionario
的定义如下:
var funcionario = db.Funcionario.Where(F => F.Email == vm.idFuncionario).Include(F => F.Grupo);
返回一个IQueryable<Funcionario>
,该行不能像您在下一行中那样隐式或显式转换:
ex.Funcionario = funcionario as Funcionario;
您应该首先执行查询,以便它返回Funcionario
的一个实例,因此只需使用以下内容:
var funcionario = db.Funcionario
.Where(F => F.Email == vm.idFuncionario).Include(F => F.Grupo)
.SingleOrDefault();
ex.Funcionario = funcionario;
SingleOrDefault()
执行查询并返回Funcionario
的一个实例。
我的代码伪装成“功能性”在每个电子邮件中都是唯一的。如果您认为同一封电子邮件必须有更多的“功能范围”,那么只需将SingleOrDefault()
替换为FirstOrDefault()
。
侧面注意:您可以将条件直接传递给SingleOrDefault()
方法,如下所示:
var funcionario = db.Funcionario
.Include(F => F.Grupo)
.SingleOrDefault(F => F.Email == vm.idFuncionario);
ex.Funcionario = funcionario;