表达式树可能不包含在C#Linq

时间:2015-06-05 20:46:37

标签: c# linq entity-framework

我正在尝试在第一部分中选择匿名类型时为其中一个属性执行case语句,然后将其转换为我的返回类型列表(retList)。在我设置QuarterName = p.QuarterName的底部的retList部分中,我在上面的部分的DatePart函数中得到以下错误:

  

表达式树可能不包含使用的调用或调用   可选参数

public static IEnumerable<Product> GetProducts(int categoryId)
{
    using (var context = new DbContext())
    {
    var pList = (from p in context.Products
             where (p.CategoryId == proformaId)
             select new 
             {
                 Id = p.Id,
                 ProductName = p.ProductName,
                 QuarterName = pa.Quarter != "ExtraQuarter" ? "Q" + DateAndTime.DatePart(DateInterval.Quarter, p.PurchaseDate) + 
                                               "-" + DateAndTime.DatePart(DateInterval.Year, p.PurchaseDate) : 
                                               "<b><i>" + p.Quarter + "</i></b>"

             }).ToList();

      var retList = from p in pList
                    select new ProformaAssumption()
                    {
                        Id = pa.Id,
                        ProductName = p.ProformaId,
                        QuarterName = p.QuarterName
                    };

      return retList;
    }

1 个答案:

答案 0 :(得分:3)

DatePart methods有其他可选参数。 C#不允许表达式树利用可选参数,因此您需要为每个方法调用提供整个参数列表。

根据文档,如果您没有为可选参数提供值,则FirstDayOfWeek.SundayFirstWeekOfYear.Jan1是将使用的值。

QuarterName = pa.Quarter != "ExtraQuarter" 
    ? "Q" +
        DateAndTime.DatePart(DateInterval.Quarter, p.PurchaseDate,
            FirstDayOfWeek.Sunday, FirstWeekOfYear.Jan1) + 
        "-" + DateAndTime.DatePart(DateInterval.Year, p.PurchaseDate,
        FirstDayOfWeek.Sunday, FirstWeekOfYear.Jan1) 
    : "<b><i>" + p.Quarter + "</i></b>"