如果用户未选择任何组,则搜索所有数据的更好方法

时间:2018-07-17 18:09:40

标签: c# search optimization

这种情况:

1)如果用户选择新闻组,则在文本框中输入新闻标题 该方法将在News中搜索,其中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来对我说,如果if声明您要消除诚信和一致性。

能否请您告诉我如何以更好的方式编写此代码?

谢谢

1 个答案:

答案 0 :(得分:0)

是否需要对新闻项进行分组?如果您的新闻项在数据库中没有分配的组,则传递-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);
}