-2

不明な数のフィルターに従ってアイテムをフィルタリングしようとしています。

//item.statusId は nullable int //statusIds は文字列です

{...


        var statusIds = Convert.ToString(items["StatusId"]);//.Split(';');

        results = mMaMDBEntities.MamConfigurations.Where(item => 
                  FilterByStatusId(statusIds, item.StatusId)).ToList();

    } 
    return results;
}


private bool FilterByStatusId(string statusIds, int? statusId)
{
    return statusIds.Contains(statusId.ToString());
}

しかし、次のエラーが発生します: LINQ to Entities does not recognize the method 'Boolean FilterByStatusId(System.String, System.Nullable1[System.Int32])' メソッドであり、このメソッドはストア式に変換できません。

それを書き直す方法はありますか?

4

2 に答える 2

2

が配列の場合statusIds、次のことができます。

results = mMaMDBEntities.MamConfigurations
                        .Where(item => statusIds.Contain(item.StatusID)).ToList();

SQLに似たものSelect * from table where ID in (1,2,3)

編集:

コードから、セミコロンで区切られた値を持つ文字列があるようです。次のようにして配列を取得し、int後でそれを LINQ 式で使用できます。

var str = Convert.ToString(items["StatusId"]);//.Split(';');
// string str = "1;2;3;4;5"; //similar to this. 
int temp;
int[] statusIds = str.Split(new[] { ";" }, StringSplitOptions.RemoveEmptyEntries)
                     .Select(r => int.TryParse(r, out temp) ? temp : 0)
                     .ToArray();

その後、次のintように式で配列を使用できます。

results = mMaMDBEntities.MamConfigurations
                        .Where(item => statusIds.Contain(item.StatusID)).ToList();
于 2013-01-21T09:07:53.130 に答える
0

述語ステートメントを where 句に直接挿入しないのはなぜですか?

このような:

results = mMaMDBEntities.MamConfigurations.Where(item => statusIds.Contains(item.StatusId).ToList();

これを機能させるには、Split の結果の文字列配列を List または IEnumerable に変換する必要がある場合があります。


例外は一目瞭然で、メソッドを記述した形式で SQL ステートメントに変換することはできませんが、上記のように記述した場合、同じ結果が得られ、機能します。

于 2013-01-21T09:08:01.417 に答える