0

在客户过滤器中,此语句返回所有客户selectedIDsCustomerID.

例如,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

假设您CustomerIDint,请将以下内容放入您的if块中:

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

AHashSet给你一个O(1)而不是O(n)查找。

(您可能想要使用TryParse而不是Parse防止错误输入,或者您可能不在乎。您可以像以前一样放弃int.Parseand 使用x.CustomerID.ToString()。)

于 2013-01-09T13:35:01.897 回答