在客户过滤器中,此语句会返回selectedIDs
中CustomerID
的{{1}}的所有客户。
例如,selectedIDs
值'1'返回CustomerID
'1'和'10'......
if (!String.IsNullOrEmpty(selectedIDs) && selectedIDs != "*")
{
query = query.Where(x => selectedIDs.Contains(x.CustomerID.ToString()));
}
如何让此查询仅返回完整selectedIDs
的客户?
答案 0 :(得分:2)
query = query.Where(x => selectedIDs.Split(',')
.Contains(x.CustomerID.ToString()));
答案 1 :(得分:1)
你在这里没有使用Linq Contains方法......你正在使用string.Contains方法....你需要使用描绘字符拆分字符串并从那里开始。
var trueSelectedIds = selectedIDs.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries);
query = query.Where(x => trueSelectedIds.Contains(x.CustomerID.ToString()));
答案 2 :(得分:0)
假设您的CustomerID
是int
,请在if
块中添加以下内容:
var realSelectedIDs = new HashSet(
selectedIDs.Split(',').Select(s => int.Parse(s)));
query = query.Where(x => realSelectedIDs.Contains(x.CustomerID));
HashSet
为您提供O(1)
而不是O(n)
查询。
(您可能希望使用TryParse
代替Parse
来防止错误输入,或者您可能不关心。您也可以放弃int.Parse
并使用{{ 1}}和以前一样。)