首页 > 解决方案 > 如果用户不选择任何组,则搜索所有数据的更好方法

问题描述

这是这种情况:

1)如果用户选择一个新闻组,然后在文本框中输入新闻的标题,该方法将在新闻中搜索 GroupId=blahblahblah

2)如果用户没有选择任何组,该方法将搜索所有新闻

public List<tbl> SerchNewsByTitle(string title, int groupid)
{
    try
    {
        var result = from n in tbl   
                     where n.GroupId == groupid 
                     select n;
        if (groupid== -1)
        {
            result = from n in tbl selec n;
        }

        return result.ToList();
    }
    catch (Exception e)
    {
        AddExceptionData(e);
        return null;
    }

}

如您所见,如果用户未选择组,我将通过 -1

有人通过传递 -1 对我说,如果声明你消除了完整性和一致性。

你能告诉我如何以更好的方式编写这段代码吗?

谢谢

标签: c#searchoptimization

解决方案


是否需要对新闻进行分组?如果您的数据库中有一个没有指定组的新闻项目,则传递一个 -1 值来指示搜索全部可能会造成混淆。有人可以将其解释为“搜索所有新闻”或“搜索所有没有指定组的新闻”

此外,就完整性而言,有一种观点认为整数 ID 应该支持完整的可用值集,并且排除负数将是不一致的。如果后备数据库列是 int 类型,则负值将是有效的。然而,在实践中,这种观点是一个有争议的话题,有些人同意,有些人不同意。

我至少会创建两个方法,这样使用这些方法的任何代码都必须对底层数据库了解得更少。这样一来,它就不必知道任何神奇的数字来搜索全部与搜索特定组。

public List<tbl> SearchNewsByTitle(string title, int groupid)
{
    try
    {
        var result = from n in tbl   
                     where (n.GroupId == (groupid < 0 ? n.GroupId : groupId))
                     select n;

        return result.ToList();
    }
    catch (Exception e)
    {
        AddExceptionData(e);
        return null;
    }

}

public List<tbl> SearchNewsByTitle(string title) 
{
    return SearchNewsByTitle(title, -1);
}

推荐阅读