3

Entity Framework を使用していますが、特定の拡張機能がサポートされていないという問題に遭遇しました。

私は 2 つのキー (両方とも char) を持っておりfromKey、のリストを検索し、 の最初の文字がと の間にある場所を選択toKeyするステートメントを作成しようとしています。WhereStoresStore.NamefromKeytoKey

string[0]動作しません、Substring動作しません - 誰かがこれを回避する方法について何か考えを持っていますか?

部分文字列メソッドのコード:

public static IQueryable<Store> FindActiveByName()
{
    var r = new ReadRepo<Store>(Local.Items.Uow.Context);

    Tuple<string, string> range = Tuple.Create("0", "9");
    return r.Find().Where(s => range.Item1 <= s.Name.Substring(0, 1) &&
                               s.Name.Substring(0, 1) <= range.Item2);
}

エラーが表示されます:

演算子 <= は文字列に適用できません

アップデート

nemesV 提供のアンサー

    public static IQueryable<Store> FindActiveByName()
    {
        Tuple<char, char> range = Tuple.Create('R', 'S');

        var r = new ReadRepo<Store>(Local.Items.Uow.Context);

        var keys = Enumerable
            .Range(range.Item1, (int)range.Item2 - (int)range.Item1 + 1)
            .Select(k => ((char)k).ToString());

        return r.Find(s => keys.Contains(s.Name.Substring(0, 1)));
    }
4

3 に答える 3

2

手元に EF がないため、これも機能しない可能性がありますが、次の回避策を試すことができます。

最初に文字列を生成しますfrom to。そしてContains、 の最初の文字がName生成された文字に含まれているかどうかを確認するために使用できます。

public static IQueryable<Store> FindActiveByName()
{
    var r = new ReadRepo<Store>(Local.Items.Uow.Context);

    Tuple<char, char> range = Tuple.Create('0', '9');

    var letters = Enumerable
                     .Range(range.Item1, (int)range.Item2 - (int)range.Item1 + 1)
                     .Select(x => ((char)x).ToString()

    return r.Find().Where(s => letters.Contains(s.Name.Substring(0, 1)));
}

または、明らかに有効な回避策があります。

  • SQL でクエリを記述します (EF には、任意のクエリを実行し、そこからエンティティを構築するための API があります)。
  • .ToArray()の前にa を挿入するWhereと、クエリの評価が強制Name.Substringされ、クライアント側で比較が行われます。
于 2012-09-06T18:51:37.843 に答える
0

次のようなことを試すことができます:

string[] data = { "Alex", "Bob", "John", "Danny", "Roy" };
char fromKey = 'A', toKey = 'D';
var query = data.Where(d => (int)d.First() >= (int)fromKey && (int)d.First() <= (int)toKey);

クエリには次が含まれますAlex, Bob and Danny

ほんの一例です。必要に応じて変更できます。これが役立つことを願っています。

于 2012-09-06T18:31:01.350 に答える