根据一系列其他值删除列表值

时间:2019-02-27 23:00:04

标签: c# asp.net sql-server

我有一种情况,其中List对象是从MSSQL数据库提取的值构建的。但是,该特定表神秘地获得了一条错误的记录,或者将其扔了进去。两条记录即使没有指向其他任何表的引用链接,也会造成麻烦,并且在没有采取任何已知用户操作的情况下仍会重新创建记录。这会带来一些麻烦,因为它将不必要的值显示在屏幕上会增加一些混乱。特定的问题是,这是一个平台,允许用户运行报价搜索,并且过滤允许选择销售代表。选择/下拉字段显示这些错误值,需要将其删除。

鉴于删除有问题的表行并不能提供理想的结果,我想也许最好的做法是修改创建List对象的代码,然后过滤掉值或在对象之后删除它们被填充。我想以一种干净,可扩展的方式进行操作,方法是提供某种可附加的数据对象,如果出现其他问题,我可以只添加一个新的字符串值,而不是笨拙地添加一些新代码来查找该值并每次将其删除。

我的想法是创建一个字符串数组,并以某种方式循环遍历该字符串以删除不良的List值,但我不能完全确定这是解决此问题的最佳方法,而且我一生都无法想到一个干净的方法。我认为最好的方法是在“查找”参数中添加过滤器,但是我不知道如何以这种方式添加数组或列表。否则,我想遍历List排序之前或之后的值并以这种方式删除所有匹配项,但是我不确定这是最佳的选择。

我已附加了当前代码,并且希望您提出任何建议。

int licenseeID = Helper.GetLicenseeIdByLicenseeShortName(Membership.ApplicationName);
List<User> listUsers;

if (Roles.IsUserInRole("Admin"))
{
    //get all users
    listUsers = User.Find(x => x.LicenseeID == licenseeID).ToList();
}
else
{
    //get only the current user
    listUsers = User.Find(x => (x.LicenseeID == licenseeID && x.EmailAddress == Membership.GetUser().Email)).ToList();
}
listUsers.Sort((x, y) => string.Compare(x.FirstName, y.FirstName));

-编辑-

我忽略了我没有开发它,只是在原始开发者消失之后才继承了它的维护,而指派给我的同事离开了公司。我不是真的很擅长处理ASP.NET网站。我假定许多对象源是隐藏的,不可编辑,因为它们是在DLL的某个地方定义的。因此,对于来自数据库表的任何这些对象,更改表将无济于事,因为无论如何我还是无法获取新数据。

但是,我确实尝试执行以下操作以过滤掉不良数据:

List<String> exclude = new List<String>(new String[] { "value1" , "value2" });
listUsers = User.Find(x => x.LicenseeID == licenseeID && !exclude.Contains(x.FirstName)).ToList();

不幸的是,它只会导致页面显示错误。

-编辑#2-

我已将服务器设置为接受新的事件查看器源,因此可以将信息写入应用程序日志以查看正在发生的情况。看起来此安装的ASP.NET不接受“包含”作为对List对象的操作。踢出一个错误,指出该方法不可用。

1 个答案:

答案 0 :(得分:0)

我可能会在表中添加一些并标记错误行,然后在查询表时跳过它们,例如

&& !ErrantData

另一种方法是需要保留一个文本文件,该文本文件会定期更新,您可以读取该文件并从中删除用户。

更大的问题是数据库中蠕动的未知行。更改用户凭据并添加创建时间戳可以帮助您缩小搜索范围。