LinQ 成变量而不会丢失引用

本文关键字:引用 变量 LinQ | 更新日期: 2023-09-27 18:32:59

我一直在寻找这个,但我找不到答案。我唯一得到的是 linq 投影,但对此一无所知。

我有一个接收实体框架表参数的函数,让我们说"客户",如下所示:

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(( 仅用于示例,我实际上使用带有谓词参数的函数来过滤(其中(结果

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

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

我为什么想要这个?因为当我调用该函数时,我使用的是从客户继承的类,并且我希望稍后重写 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(,那么在"基础。加载"给我一个错误,因为它无法从客户转换到客户X。这就是为什么我需要保留我的变量引用。

LinQ 成变量而不会丢失引用

您可以使用 AutoMapper 将属性从一个对象移动到另一个对象。 例如

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;
}

考虑到客户是一个,所以通过编码的引用类型就像你写的那样:

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

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