我怎样才能有一个不执行任何操作的 LINQ where 子句?

How can I have a LINQ where clause that does nothing?

我有这段代码,我正在使用它来select一个Where应用条款。

对于CVM.IncludeHidden的情况,我不需要限制行数,想得到所有的东西。但我不知道该怎么做。如果是这种情况,我应该为 where 子句添加什么?

var select = " SELECT" +
                         " P.PhraseId, P.PhraseNum, P.English, P.Romaji, P.Kana, P.Kanji, P.Modified, P.WordType, P.Favorite," +
                         " P.Hidden, P.Viewed, P.Points, P.Score," +
                         " FROM Phrase" +
                         " WHERE P.Selected = 1 ";

List<Phrase> ps = db2.Query<Phrase>(select).ToList();
List<Phrase> psNoa = ps.Where(x => x.Points < noa).ToList();

Func<Phrase, bool> whereClause;

switch (Settings.cvm)
{
    case CVM.IncludeHidden:
        // I don't want to do any limiting
        // here I just want all records
        whereClause = ??
        break;
    case CVM.ExcludeHidden:
        whereClause = x => x.Hidden == false;
        break;
    case CVM.Hidden:
        whereClause = x => x.Hidden == true;
        break;
    case CVM.Favorites:
        whereClause = x => x.Favorite == true;
        break;
    default:
        return null;
}

return new SelectedPhrases()
{
    ps = ps.Where(whereClause).ToList(),
    psNoa = psNoa.Where(whereClause).ToList()
};

public class SelectedPhrases
{
    public List<Phrase> ps { get; set; }
    public List<Phrase> psNoa { get; set; }
}

Where 扩展方法只检查函数的结果是否为 true。如果是这样,它就通过了。所以简单地 returning true 就足够了:

whereClause = x => true;

您似乎无缘无故地创建了一个新列表。如果你执行了很多,它会影响你的表现。您还可以将 whereClause 设置为 null,然后在 return 对象之前检查它:

if (whereClause != null)
{
    return new SelectedPhrases()
        {
            ps = ps.Where(whereClause).ToList(),
            psNoa = psNoa.Where(whereClause).ToList()
        };
}
else
{
    return new SelectedPhrases()
        {
            ps = ps,
            psNoa = psNoa
        };
}