看样子param接受的是params 参数,理论上你传入IEnumable<T>会识别出来的啊
解决方案 »
- 关于数据库datatime
- 毕业设计 给个新颖一点题目
- asp.net 字符串转成类
- xml 格式控制问题,高手来解决一些阿
- datagrid问题
- 小弟刚学.net,对框架的感性认识十分欠缺,望各位大虾帮忙
- wince VS2008 C# PreProcessMessage问题
- 图片保存问题
- 请问在Console程序中,如何处理键盘事件?还有如何退出console程序?
- 错误 26 Task failed because "AL.exe" was not found错误解决
- C# winform richtextbox 在窜口接收的数据中 查找指定的字符并高亮
- 求助:假设服务器和客户端之间的消息有三种字节编码方式,给定一个字节编码的数据info,如何将info解码成原来的数据类型?
或者猜测这个方法有泛型方法,显示声明T为int,而不是自动推断
最后有两种方法解决
一种是原框架作者提出的,类似这种
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);