List <t>的扩展方法包含(T?对象)如何?</t>

时间:2013-06-11 10:43:24

标签: c#

我想编写一个扩展方法,就像List类的Contains方法一样,它接受一个null的对象。有人可以帮我解决这个问题吗?

1 个答案:

答案 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));