我想编写一个扩展方法,就像List类的Contains方法一样,它接受一个null的对象。有人可以帮我解决这个问题吗?
答案 0 :(得分: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));