2010-03-13 56 views
1

我通过getiembyid得到了项目......但是我想在使用它之前检查项目是否存在......我不想使用查询作为使用Getitembyid的主要目的是性能.....任何想法如何实现这一目标?在使用GETITEMBYID()前检查异常()

itemid = Response.QueryString["loc"]; 
    SPList mylist = myweb.GetList(SPUrlUtility.CombineUrl(myweb.ServerRelativeUrl, "/Lists/Location")); 

//现在ID的itemid不存在抛出异常,所以,我想使用的itemid存在下面的语句前检查。 ..我知道我可以检查抛出SPQuery但正如我前面所说,因为性能问题的唯一使用的itemid即时通讯....

SPListItem myitem = mylist.GetItemById(Convert.ToInt32(itemid)); 

任何想法如何实现这一目标?

回答

4

SPQuery决不会让你的代码变慢,事实上,网络上的其他SharePoint文章建议你使用SPQuery来获得性能。为了让事情更有趣GetItemByID内部使用SPQuery来获取项目还给你,以下是从GetItemByID功能

SPQuery query = new SPQuery(); 
    query.Query = "<Where><Eq><FieldRef Name=\"ID\"></FieldRef><Value Type=\"Integer\">" + id.ToString(CultureInfo.InvariantCulture) + "</Value></Eq></Where>"; 

重要的是这里要注意的是SPQuery有一个名为SingleItemId一个内部属性,它需要标识所采取的部分代码您想要获取的Item Id的进一步跟踪方式无法找到,因为调用最终会在COM对象中出现。

是说,你有两个选择 选项1:

包裹catch块你GetItemByID代码和检查异常,如果出现一个可以标记一个标志,表示该产品ID无效,并采取行动为了它。选项2:使用SPQuery,您可以使用SPQuery测试时差GetItemByID &,您会看到没有,只是非常非常少。