Sql 查询EF以使用自定义实体从外键获取值<;T>;
我刚刚使用EF,我不知道如何解决一个简单的选择问题,我有两种实体类型,如:Sql 查询EF以使用自定义实体从外键获取值<;T>;,sql,asp.net-mvc,entity-framework,Sql,Asp.net Mvc,Entity Framework,我刚刚使用EF,我不知道如何解决一个简单的选择问题,我有两种实体类型,如: IEnumerable<T> Listar(Expression<Func<T, bool>> filter = null, Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null, string includeProperties = "")
IEnumerable<T> Listar(Expression<Func<T, bool>> filter = null,
Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null,
string includeProperties = "");
Tipos Carga表格:
+----+--------+--------------+-----------+
| ID | Nombre | Descripcion | EstatusID |
+----+--------+--------------+-----------+
| 1 | store | description1 | 2 |
+----+--------+--------------+-----------+
| 2 | oxo | description2 | 2 |
+----+--------+--------------+-----------+
我得到的价值观如下:
var tc = _tipoCargaService.Listar(c => c.EstatusID.Equals(estatusid));
List<TipoCargaViewModel> tiposcargas = new List<TipoCargaViewModel>();
foreach (var item in tc)
{
var carga = new TipoCargaViewModel()
{
ID = item.ID,
Nombre = item.Nombre,
Descripcion = item.Descripcion,
EstatusID = item.EstatusID
};
tiposcargas.Add(carga);
}
然后像这样称呼estatus:
var estatus = _estatusService.Cargar(x => x.Nombre.Where(ID == cargatc.EstatusID));
但是我不能等于Nombre.Where(ID==cargatc.EstatusID)
我获取的
无法解析符号ID
,并被标记为红色,与cargatc.EstatusID的相同。关于您已经通过includeProperties
param将功能烘焙到了方法中,至少表面上是这样。您只需在此处添加相关实体:
var tc = _tipoCargaService.Listar(c => c.EstatusID.Equals(estatusid), includeProperties: "Estatus");
然后:
当然,这需要在TiposCarga
实体类上有一个导航属性:
public Estatus Estatus { get; set; }
您已经通过includeProperties
param将功能烘焙到了方法中,至少看起来是这样。您只需在此处添加相关实体:
var tc = _tipoCargaService.Listar(c => c.EstatusID.Equals(estatusid), includeProperties: "Estatus");
然后:
当然,这需要在TiposCarga
实体类上有一个导航属性:
public Estatus Estatus { get; set; }
除非我误解了你的问题,否则你真的不需要虚拟机,你只需要确保你的导航属性完好无损,这会让你的生活更轻松
验证是否在EF中正确设置了导航属性:
public class Estatus
{
public int ID { get; set; }
public String Nombre { get; set; }
public virtual ICollection<TipoCarga> TipoCargas { get; set; }
}
public class TipoCarga
{
public int ID { get; set; }
public String Nombre { get; set; }
public String Descripcion { get; set; }
public virtual Estatus Estatus { get; set; }
}
公共类资产
{
公共int ID{get;set;}
公共字符串Nombre{get;set;}
公共虚拟ICollection TipoCargas{get;set;}
}
公共类TipoCarga
{
公共int ID{get;set;}
公共字符串Nombre{get;set;}
公共字符串描述符{get;set;}
公共虚拟资产{get;set;}
}
选择时,使用“包含关键字”加载对象和链接对象,以便将其包含在返回中。如果不执行此操作,延迟加载将生效,并且链接对象将不会加载(在数据上下文之外尝试访问链接对象属性时,将出现错误):
public List getwhere(int-estatusid)
{
使用(DB context=new DB())
{
返回context.TipoCargas.Include(“Estatus”).Where(a=>a.Estatus.ID==estatusid.ToList();
}
}
除非我误解了你的问题,否则你并不需要虚拟机,你只需要确保你的导航属性完好无损,这样你的生活就会轻松得多
验证是否在EF中正确设置了导航属性:
public class Estatus
{
public int ID { get; set; }
public String Nombre { get; set; }
public virtual ICollection<TipoCarga> TipoCargas { get; set; }
}
public class TipoCarga
{
public int ID { get; set; }
public String Nombre { get; set; }
public String Descripcion { get; set; }
public virtual Estatus Estatus { get; set; }
}
公共类资产
{
公共int ID{get;set;}
公共字符串Nombre{get;set;}
公共虚拟ICollection TipoCargas{get;set;}
}
公共类TipoCarga
{
公共int ID{get;set;}
公共字符串Nombre{get;set;}
公共字符串描述符{get;set;}
公共虚拟资产{get;set;}
}
选择时,使用“包含关键字”加载对象和链接对象,以便将其包含在返回中。如果不执行此操作,延迟加载将生效,并且链接对象将不会加载(在数据上下文之外尝试访问链接对象属性时,将出现错误):
public List getwhere(int-estatusid)
{
使用(DB context=new DB())
{
返回context.TipoCargas.Include(“Estatus”).Where(a=>a.Estatus.ID==estatusid.ToList();
}
}
public class Estatus
{
public int ID { get; set; }
public String Nombre { get; set; }
public virtual ICollection<TipoCarga> TipoCargas { get; set; }
}
public class TipoCarga
{
public int ID { get; set; }
public String Nombre { get; set; }
public String Descripcion { get; set; }
public virtual Estatus Estatus { get; set; }
}
public List<TipoCarga> GetWhatever(int estatusid)
{
using (DB context = new DB())
{
return context.TipoCargas.Include("Estatus").Where(a => a.Estatus.ID == estatusid).ToList();
}
}