在Share Point 2010中,如何使用 in 语句?并且解决Boolean Contains[Int32](System.Collections.Generic.IEnumerable`1[System.Int32], Int32)的问题。
2011-01-19 11:39
591 查看
LINQ To Entities如何实现查询 select * from tableA where id in (1,2,3,4) ?
通常想到的就是使用以下方法。
IList<int> ids = new List<int> { 2, 3, 4 };
= db.TasMenuInfo.Where(a => ids.Contains(a.MenuType)).ToList()
var list
如果你是在Share Point2010中,使用,则会报该错误,并且不管是换成字符串类型,还是其它的类型,都不行。错误信息如下:
LINQ to Entities 不识别方法“Boolean Contains[Int32](System.Collections.Generic.IEnumerable`1[System.Int32], Int32)”,因此该方法无法转换为存储表达式。
我仔细查了一下,原来发现,Share Point 2010 的.net 版本是.net 3.5 的,也就是说在.net 3.5中是不支持泛型List<T>.Contains这个方面在LINQ 中使用的。
于是我换了如下方法使用。
//MenuType = 1 报表信息
List<TasMenuInfo> list = bll.GetTasMenuInfo().Where("it.MenuType = 1").ToList();
List<TasMenuInfo> TasMenuInfos = new List<TasMenuInfo>();
//查找对象 .net 3.5 不支持list.Contains方法
for (int i = 0; i < listtg.Count(); i++)
{
TasMenuInfo item = list.Find(delegate(TasMenuInfo p) { if (p.MenuID == listtg.ToList()[i].MenuID) return true; return false; });
if (item != null)
TasMenuInfos.Add(item);
};
ddlReportName.DataSource = TasMenuInfos;
ddlReportName.DataTextField = "MenuName";
ddlReportName.DataValueField = "MenuID";
ddlReportName.DataBind();
以上代码,在使用时其实应该使用List.FindAll()方法可能更合适 ,便是因为我没有找到相应的方法,也就作罢了,如果有人会用了告诉我哟。
通常想到的就是使用以下方法。
IList<int> ids = new List<int> { 2, 3, 4 };
= db.TasMenuInfo.Where(a => ids.Contains(a.MenuType)).ToList()
var list
如果你是在Share Point2010中,使用,则会报该错误,并且不管是换成字符串类型,还是其它的类型,都不行。错误信息如下:
LINQ to Entities 不识别方法“Boolean Contains[Int32](System.Collections.Generic.IEnumerable`1[System.Int32], Int32)”,因此该方法无法转换为存储表达式。
我仔细查了一下,原来发现,Share Point 2010 的.net 版本是.net 3.5 的,也就是说在.net 3.5中是不支持泛型List<T>.Contains这个方面在LINQ 中使用的。
于是我换了如下方法使用。
//MenuType = 1 报表信息
List<TasMenuInfo> list = bll.GetTasMenuInfo().Where("it.MenuType = 1").ToList();
List<TasMenuInfo> TasMenuInfos = new List<TasMenuInfo>();
//查找对象 .net 3.5 不支持list.Contains方法
for (int i = 0; i < listtg.Count(); i++)
{
TasMenuInfo item = list.Find(delegate(TasMenuInfo p) { if (p.MenuID == listtg.ToList()[i].MenuID) return true; return false; });
if (item != null)
TasMenuInfos.Add(item);
};
ddlReportName.DataSource = TasMenuInfos;
ddlReportName.DataTextField = "MenuName";
ddlReportName.DataValueField = "MenuID";
ddlReportName.DataBind();
以上代码,在使用时其实应该使用List.FindAll()方法可能更合适 ,便是因为我没有找到相应的方法,也就作罢了,如果有人会用了告诉我哟。
相关文章推荐
- “System.Collections.Generic.IEnumerable<decimal>”不包含“ToArray”的定义,并且找不到可接受类型为“System.Collections.Generic.IEnumerable<decimal>”的第一个参数的扩展方法“ToArray”
- C#编译问题'System.Collections.Generic.IEnumerable' does not contain a definition for 'Where' and no extension method 'Where' accepting a first argument
- 如何解决在ie下,Echarts多次使用setOption更改数据时,数据错乱问题
- Marvell交换机luaCLI引擎启动流程以及如何解决函数cpssInitSystem()被二次调用的问题
- 解决“ORA-01795” 问题的方法,即如何组装In条件的语句
- 使用泛型 类型“System.Collections.Generic.IEnumerator<T>”需要 1 个类型参数
- “System.Collections.Generic.IEnumerable<TestDAL.HistoryData>”不包含“ToList”的定义
- 无法将类型“System.Collections.Generic.IEnumerable<EmailSystem.Model.TemplateInfo>”隐式转换为“System.Collections.Generic.List<EmailSystem.Model.TemplateInf
- “System.Collections.Generic.IEnumerable<TestDAL.HistoryData>”不包含“ToList”的定义
- System.Collections.Generic.IEnumerable<T>接口
- 如何解决在ie下,Echarts多次使用setOption更改数据时,数据错乱问题
- 如何解决在ie下,Echarts多次使用setOption更改数据时,数据错乱问题
- 如何解决自定义404页面在IE等浏览器中无法显示问题
- springMVC框架在js中使用window.location.href请求url时IE不兼容问题解决
- vista sp1 使用迅雷后ie问题(解决方法)
- C++中Boost使用出现错误undefined reference to `boost::system::generic_category()'解决方法
- [完美解决]如何在windows安装docker toolbox,使用tensorflow,Jupyter Notebook,各种问题的解决方案
- 关于JAVA的Scanner(System.in)循环输入的一些问题与解决
- 如何解决Android eclipse 使用RecyclerView和CardView控件时报错问题
- 如何使用Google解决问题