在第一部分中选择匿名类型时,我试图为其中一个属性做一个 case 语句,然后将其转换为我的返回类型列表 (retList)。在底部的 retList 部分中,当我设置 QuarterName = p.QuarterName 时,我在上一节的 DatePart 函数上收到以下错误:
An expression tree may not contain a call or invocation that uses optional arguments
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
methods有额外的可选参数。 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>"
关于c# - 表达式树可能不包含在 C# Linq 中使用选项参数的调用或调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30675550/