在第一部分中选择匿名类型时,我试图为其中一个属性做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.Sunday
和FirstWeekOfYear.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>"