包含作为扩展方法的方法不起作用

本文关键字:方法 不起作用 扩展 包含作 | 更新日期: 2023-09-27 18:17:55

我想为List类编写一个扩展方法,就像List类的Contains方法一样,它接受一个null able对象。我的扩展方法是:

public static class CustomList
    {
        public static bool Contains<T>(this List<T> lst, Nullable<T> obj) where T : struct
        {
            bool bContains = false;
            if (obj == null)
            {
                bContains = false;
            }
            else
            {
                T obj1 = (T)obj.Value;
                bContains = lst.Contains(obj1);
            }
            return bContains;
        }
}

调用扩展方法的LINQ代码如下所示:

var lstJobActivity = (from objActivity in context.VW_JOB_ACTIVITY
                                  where JobAssignId.Contains(objActivity.ASSIGN_ID) && objActivity.ACTIVITY_TYPE == "JBINTV"
                                  select objActivity).ToList<VW_JOB_ACTIVITY>();

其中objActivity.ASSIGN_IDnull

错误显示如下:

LINQ到实体不能识别方法'Boolean Contains[Int64](System.Collections.Generic.)。列出1[System.Int64], System.Nullable 1[System.Int64])'方法,该方法不能转换为存储表达式

包含作为扩展方法的方法不起作用

这里的问题是LINQ必须构建查询并将其传递给数据库引擎。您指定这个函数作为查询的一部分,LINQ足够聪明,知道数据库引擎不知道如何执行这个函数。