我想为 List 类编写一个扩展方法,就像 List 类的 Contains 方法一样,它接受一个可以为空的对象。有人可以帮我解决这个问题吗?
问问题
620 次
1 回答
1
从您对另一个答案的评论来看,您似乎正在尝试做类似的事情
var myWantedIds = new List<int> { 1, 2, 3 };
var matchingItems = myEntityFrameworkItems
.Where(efItem => myWantedIds.Contains(efItem.NullableIdProperty));
在这里编写一个重载Contains
将无济于事,因为它不能被翻译成 SQL。
要尝试的一件事是检查列表是否包含非空 ID:
var myWantedIds = new List<int> { 1, 2, 3 };
var matchingItems = myEntityFrameworkItems
.Where(efItem => efItem.NullableIdProperty.HasValue &&
myWantedIds.Contains(efItem.NullableIdProperty.Value));
如果这也不能翻译,您还可以尝试将搜索列表转换为可为空的版本:
var myWantedIds = new List<int> { 1, 2, 3 };
var myNullableIds = myWantedIds.Select(i => new int?(i)).ToList();
var matchingItems = myEntityFrameworkItems
.Where(efItem => myNullableIds.Contains(efItem.NullableIdProperty));
于 2013-06-11T11:17:28.680 回答