看样子param接受的是params 参数,理论上你传入IEnumable<T>会识别出来的啊

解决方案 »

  1.   

    .In<int>(productIdList.ToArray())
    或者猜测这个方法有泛型方法,显示声明T为int,而不是自动推断
      

  2.   


    最后有两种方法解决
    一种是原框架作者提出的,类似这种
    repo.Where<Product>(x => x.Id.In(x(string.Join(",",productIdList))));
    生成的SQL语句不是参数化的语句,比如上面的C#语句生成SQL语句后面的条件部分直接是 IN (1,2,3,4)
    另外一种就是修改一下源码,源码原来是这样:case "IN":
                        if (obj.Arguments == null) throw new ArgumentException("IN() argument list is null.");
                        if (obj.Arguments.Length == 0) throw new ArgumentException("IN() requires at least one argument.");
                        for (i = 0; i < obj.Arguments.Length; i++)
                        {
                            str = Parse(obj.Arguments[i], pc, nulls);
                            item = item == null ? str : "{0}, {1}".FormatWith(item, str);
                        }
                        return "{0} IN ({1})".FormatWith(parent, item);
    我修改了一下,改成这样,但是不是很通用,只是解决了目前集合传入问题case "IN":
                        if (obj.Arguments == null) throw new ArgumentException("IN() argument list is null.");
                        if (obj.Arguments.Length == 0) throw new ArgumentException("IN() requires at least one argument.");
                        if (obj.Arguments[0].GetType().IsArray)
                        {
                            object currentObject = obj.Arguments[0];
                            Array objects = currentObject as Array;
                            for (i = 0; i < objects.Length; i++)
                            {
                                str = Parse(objects.GetValue(i), pc, nulls);
                                item = item == null ? str : "{0}, {1}".FormatWith(item, str);
                            }
                        }
                        else
                        {
                            for (i = 0; i < obj.Arguments.Length; i++)
                            {
                                str = Parse(obj.Arguments[i], pc, nulls);
                                item = item == null ? str : "{0}, {1}".FormatWith(item, str);
                            }
                        }
                        return "{0} IN ({1})".FormatWith(parent, item);
      

  3.   

    可以看看我使用的CodeSmith模板生成数据层