我怎样才能有一个不执行任何操作的 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
};
}
我有这段代码,我正在使用它来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
};
}