我决定用 C# 创建一个简单的 MVVM 应用程序。我有一组用户。我可以编辑、添加、删除、更新和搜索它们。对于最后一个选项,我遇到了问题。以下是部分有问题的代码:
var Usersview = new ObservableCollection<User>
(from item in Users
where (
Convert.ToString(item.UserId) == (Names[0])
&& item.FirstName.Contains(Names[1])
&& item.LastName.Contains(Names[2])
&& item.City.Contains(Names[3])
&& item.State.Contains(Names[4])
&& item.Country.Contains(Names[5]))
select item);
Names 是我可以搜索的值数组。 名称可以为空。 只有UserID是int,其余都是string。
我想要实现的是通过字符串类型名称的片段进行搜索,但是如果设置了 UserID 值,则程序必须通过整个 int(而不是其片段)进行搜索。如果 Names[0] 是 string.Empty,则程序不会搜索任何内容。你可以帮帮我吗?但要记住。这些是我使用 MVVM 和 Linq 的第一步。所以请原谅。
最佳答案
据推测,您不必为搜索填写所有搜索字段。此外,您不应将 int
转换为 string
来比较相等性。将您的范围变量和搜索条件重命名为更有意义,我得到:
var Usersview = new ObservableCollection<User>
(from user in Users
where
(String.IsNullOrEmpty(searchCriteria[0]) || Convert.ToInt32(searchCriteria[0]) == user.UserId) &&
(String.IsNullOrEmpty(searchCriteria[1]) || user.FirstName.Contains(searchCriteria[1])) &&
(String.IsNullOrEmpty(searchCriteria[2]) || user.LastName.Contains(searchCriteria[2]) &&
(String.IsNullOrEmpty(searchCriteria[3]) || user.City.Contains(searchCriteria[3])) &&
(String.IsNullOrEmpty(searchCriteria[4]) || user.State.Contains(searchCriteria[4])) &&
(String.IsNullOrEmpty(searchCriteria[5]) || user.Country.Contains(searchCriteria[5]))
select user);
关于c# - 如果值为字符串类型则按片段搜索,但如果值为 int 则按整个搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51676362/