在c# Linq中,表达式树不能包含使用选项参数的调用或调用



在第一部分中选择匿名类型时,我试图为其中一个属性做case语句,然后将其转换为我的返回类型(retList)的列表。在底部的retList部分中,当我设置QuarterName = p.QuarterName时,我从上面的部分中得到以下关于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;
    }

DatePart方法有附加的可选参数。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>"

相关内容

  • 没有找到相关文章

最新更新