【问题标题】:Linq to entities and ExpressionLinq 到实体和表达式
【发布时间】:2017-06-10 21:15:21
【问题描述】:

我有以下代码:

public abstract class AdvancedDeductionAbstractVM
{
    public int ID { get; set; }
    [Display(Name = "Driver Name")]
    public string DriverName { get; set; }
    public string Description { get; set; }
    [Display(Name = "Date")]
    [DisplayFormat(DataFormatString = "{0:d}")]
    public DateTime DateTime { get; set; }
    [Display(Name = "Amount")]
    [DisplayFormat(DataFormatString = "{0:c}")]
    public decimal Amount { get; set; }
}

public class AdvancedDeductionElementVM : AdvancedDeductionAbstractVM
{
}

public class AdvancesDeductionDetailVM : AdvancedDeductionAbstractVM
{
}

public class AdvancesDeductionDeleteVM : AdvancedDeductionAbstractVM
{
}

表达式:

    private Expression<Func<AdvancesDeduction, T>> GetAdvancesDeductionAbstractExpression<T>() where T : AdvancedDeductionAbstractVM, new()
    {
        Expression<Func<AdvancesDeduction, T>> projection = i =>
            new T()
            {
                ID = i.ID,
                Amount = i.Amount,
                DateTime = i.DateTime,
                Description = i.Description,
                DriverName = i.Driver.Name
            };
        return projection;
    }

并使用它:

        AdvancesDeductionDetailVM model = (from i in db.AdvancesDeductions
                                           where i.ID == id.Value
                                           select i)
                                           .Select(GetAdvancesDeductionAbstractExpression<AdvancesDeductionDetailVM>()).FirstOrDefault();

        AdvancesDeductionDeleteVM model = (from i in db.AdvancesDeductions
                                           where i.ID == id.Value
                                           select i).Select(GetAdvancesDeductionAbstractExpression<AdvancesDeductionDeleteVM>()).FirstOrDefault();

它有效,但我想将它添加到 Linq 到实体,而不是使用 Lambda 表达式。有什么使用方法吗?

【问题讨论】:

  • 你想把它添加到linq到实体是什么意思
  • 我想要喜欢(从 i in db.AdvancesDeductions where i.ID == id.Value select MyFunction);
  • 不明白你的问题是什么?

标签: c# entity-framework linq linq-to-entities


【解决方案1】:

您可能想看看NeinLinq 之后你可以做

    [InjectLambda]
    public static bool To<T>(this AdvancedDeductionAbstractVM value) where T : AdvancedDeductionAbstractVM, new()
    {
        throw new NotImplementedException();
    }

    public static Expression<Func<AdvancedDeductionAbstractVM,T>> To<T>() where T : AdvancedDeductionAbstractVM, new()
    {
        return i =>
            new T()
            {
                ID = i.ID,
                Amount = i.Amount,
                DateTime = i.DateTime,
                Description = i.Description,
                DriverName = i.Driver.Name
            };
    }

并像使用它

AdvancesDeductionDetailVM model = (from i in db.AdvancesDeductions.ToInjectable()

                                           where i.ID == id.Value
                                           select i.To<AdvancesDeductionDetailVM>()).FirstOrDefault();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多