LINQ Where子句有四个&&

时间:2012-11-24 15:20:38

标签: c# linq sqlite windows-8 microsoft-metro

我正在尝试在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子句的部分代码相关

3 个答案:

答案 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);
});