我正在尝试在Where子句中创建一个带有4个参数的LINQ查询。这是一个Windows 8 App项目,我正在使用SQLite数据库。 (SQLite implementation )
以下是代码段:
public List<FinancialListBoxExpenseItem> retrieveExpenseItems(int month, int year, bool isPaid, StaticResources.FrequencyEnum frequencyEnum)
{
List<FinancialListBoxExpenseItem> tmpList = null;
connection.RunInTransaction(() =>
{
var items = from s in connection.Table<FinancialListBoxExpenseItem>()
where (s.expenseDateNextPayment.Month == month)
&& (s.expenseDateNextPayment.Year == year)
&& (s.expensePaidForCurrentPeriod == isPaid)
&& (s.expenseFrequencyTypeEnum == frequencyEnum)
select s;
tmpList = items.ToList<FinancialListBoxExpenseItem>();
});
return tmpList;
}
它抛出NotSupportedAction:成员访问无法编译表达式异常
我不知道这意味着什么以及我应该如何修复它。
编辑:它的工作没有where子句因此错误必须与此where子句的部分代码相关
答案 0 :(得分:5)
您的LINQ提供程序可能不支持.Month
。您可能需要解决这个问题,可能需要为月份和年份创建专门的列。
答案 1 :(得分:3)
这就是我解决问题的方法:
public List<FinancialListBoxExpenseItem> retrieveExpenseItems(int month, int year, bool isPaid, StaticResources.FrequencyEnum frequencyEnum)
{
List<FinancialListBoxExpenseItem> tmpList = new List<FinancialListBoxExpenseItem>();
connection.RunInTransaction(() =>
{
var items = from s in connection.Table<FinancialListBoxExpenseItem>()
let convertedDate = (DateTime)s.expenseDateNextPayment
where (convertedDate.Month == month)
&& (convertedDate.Year == year)
&& (s.expensePaidForCurrentPeriod == isPaid)
&& (s.expenseFrequencyTypeEnum == frequencyEnum)
select s;
tmpList = items.ToList();
});
return tmpList;
}
答案 2 :(得分:0)
在我的应用程序中,我在运行LINQ查询时得到NotSupportedException
,并且显示了异常的详细信息
成员访问无法编译表达式
正如这个帖子告诉我的那样,发布似乎是由查询中引用的DateTime
变量引起的。除了找到像这样的StackOverflow线程以指向正确的方向之外,我不确定任何人应该如何自己解决这个问题,但对我来说,改变我编写查询的方式可以解决问题。
此语法抛出“NotSupportedException”:*
IEnumerable<Foo> foos = connection.Table<Foo>().Where(foo => foo.Timestamp.Year == year);
切换到这种语法工作得很好:
IEnumerable<Foo> foos = connection.Table<Foo>().Where(
delegate(Foo foo)
{
return (foo.Timestamp.Year == year);
});