0

selectedIDs顧客のフィルターでは、このステートメントは、にの一部があるすべての顧客を返しますCustomerID

たとえば、selectedIDs値「1」はCustomerID「1」と「10」を返します...

if (!String.IsNullOrEmpty(selectedIDs) && selectedIDs != "*")
{
    query = query.Where(x => selectedIDs.Contains(x.CustomerID.ToString()));
}

このクエリを取得して、完全な顧客のみを返すにはどうすればよいselectedIDsですか?

4

3 に答える 3

2
query = query.Where(x => selectedIDs.Split(',')
                              .Contains(x.CustomerID.ToString()));
于 2013-01-09T13:33:32.480 に答える
1

ここではLinqのContainsメソッドを使用していません... string.Containsメソッドを使用しています....区切り文字を使用して文字列を分割し、そこから移動する必要があります。

var trueSelectedIds = selectedIDs.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries);
query = query.Where(x => trueSelectedIds.Contains(x.CustomerID.ToString()));
于 2013-01-09T13:32:16.480 に答える
0

CustomerIDあなたが であると仮定して、あなたのブロックintに以下を入れてください:if

var realSelectedIDs = new HashSet(
    selectedIDs.Split(',').Select(s => int.Parse(s)));
query = query.Where(x => realSelectedIDs.Contains(x.CustomerID));

Aはルックアップではなく、HashSetあなたに与えます。O(1)O(n)

(不正な入力から保護するTryParse代わりに使用したい場合もあれば、気にしない場合もあります。以前と同じように、 を削除して使用することもできます。)Parseint.Parsex.CustomerID.ToString()

于 2013-01-09T13:35:01.897 に答える