LinQ进入变量而不失参考

时间:2013-09-26 15:20:03

标签: c# linq entity-framework

我一直在寻找这个,但我无法找到答案。我唯一得到的是linq投影,但没有任何内容。

我有一个接收实体框架表参数的函数让我们说" customer",就像这样:

public partial class customer
{
    public customer()
    {
    }

    public int id { get; set; }
    public string descripcion { get; set; }
    public bool activo { get; set; }

}

........

public virtual customer Load(customer paramEntity)
{
      using (BillingDbContext bd = new BillingDbContext())
      {
          paramEntity = (from s in bd.customer
                    select s).First();
      }

      return paramEntity;
}

注意:First()仅用于示例,我实际上使用带谓词参数的函数来过滤(where)结果

我想要的是,不是从linq接收新对象,而是使用linq填充我的参数(paramEntity),所以我不会丢失参数引用。

这可能吗?没有将每个属性从一个变量复制到另一个变量?

为什么我要这个?因为当我调用该函数时,我使用来自customer的继承类,我希望稍后覆盖Load函数。像这样:

public class customerX : customer
{    
    public float saldo {get; set;}

}

........

public override customer Load(customer paramEntity)
{
        customerX e = (customerX)base.Load(paramEntity);
        e.saldo = SomeFunctionLoadSaldo(e.id);

        return e;
}

........

customerX c = (customerX)Load(new customerX());

注意:如果我从一开始就没有通过继承的类(customerX),那么在" base.Load"给我一个错误,因为它无法从客户转向customerX。这就是我需要保留变量引用的原因。

2 个答案:

答案 0 :(得分:2)

您可以使用AutoMapper将属性从一个对象移动到另一个对象。 E.g。

public virtual customer Load(customer paramEntity)
{
    using (BillingDbContext bd = new BillingDbContext())
    {
        var dbEntity = (from s in bd.customer
                    select s).First();
        Mapper.Map(dbEntity, paramEntity);
    }

    return paramEntity;
}

答案 1 :(得分:-1)

考虑到Customer是,所以引用类型的编码方式与您所写的一样:

(from s in bd.customer select s).First();

您实际上会返回集合中可用的相同引用,例如LINQ查询。在您引用数据库的情况下,您需要一种方法,将数据从构造为数据库的对象投射到您已有的对象。