4

Where句に4つの引数を指定してLINQクエリを作成しようとしています。これはWindows8アプリプロジェクトであり、SQLiteデータベースを使用しています。(SQLiteの実装

コードスニペットは次のとおりです。

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句の部分に関連している必要があります

4

3 に答える 3

5

おそらく.Month、LINQプロバイダーではサポートされていません。おそらく月と年に特化した列を作成することによって、それを回避する必要があります。

于 2012-11-24T20:39:32.913 に答える
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;
}
于 2012-11-24T22:18:50.763 に答える
0

私のアプリではNotSupportedException、LINQクエリを実行しているときに取得していましたが、例外の詳細が表示されました

メンバーアクセスが式のコンパイルに失敗しました

このスレッドが私に知らせたように、発行された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);
});
于 2017-03-10T05:51:50.127 に答える