[英]How do you overload Linq's Where clause to accept SqlBoolean?
Linq的Where子句可用於布爾值。 如何使它與sqlBooleans一起使用。 這是示例代碼來說明問題
// Trivia example to draw attention to the problem
var nodeCollection = new List<SqlBoolean>();
nodeCollection.Add(SqlBoolean.Parse("0"));
nodeCollection.Add(SqlBoolean.Parse("1"));
nodeCollection.Add(SqlBoolean.Parse("1"));
var nodeA = SqlBoolean.Parse("1");
var trueOne = nodeCollection.Where(n => n == nodeA); // Error message, cannot convert SqlBoolean to bool
由於謂詞的結果是SqlBoolean而不是bool,因此會出現錯誤。 您如何擴展Where子句來完成這項工作。 使用強制轉換時,不希望使用SqlBoolean的Value,IsTrue和IsFalse。
您可以創建一個擴展方法來包裝Where
:
public static IEnumerable<T> WhereSqlBoolean<T>(
this IEnumerable<T> source, Func<T,SqlBoolean> condition) {
return source.Where(t => (bool)condition(t));
}
仍然不是最干凈的,但是可以工作:
var trueOne = nodeCollection.WhereSqlBoolean(n => n == nodeA);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.