使用SharePoint中的LINQ访问列表

时间:2012-01-13 05:02:31

标签: c# sharepoint-2010 sharepoint-list

我将使用LINQ访问SharePoint列表并加载到网格。我在共享点网站上有员工和项目列表。

我找到了一些代码here

private void BindGrid()
        {
            SPLinqDataContext dc = new SPLinqDataContext(SPContext.Current.Web.Url);
            EntityList<EmployeesItem> Employees = dc.GetList<EmployeesItem>("Employees");

            var EmployeeQuery = from e in Employees.ToList()
                                select new
                                {
                                    e.Title,
                                    e.FirstName,
                                    Position = e.Position.Title,
                                    PositionDescription = e.Position.Description,
                                    Department = e.Position.Department.Title
                                };
            GridView1.DataSource = EmployeeQuery;
            GridView1.DataBind();
        }

我的问题是关于<EmployeesItem>。这是继承我的参考吗?或者我应该像往常一样在.net中创建一个单独的类?

注意 - 我的意思是参考: 我们应该生成LINQ to SharePoint代理代码以使用LINQ。 spmetal.exe /web:http://localhost/sites/MySampleWebSite /namespace:AccessSPDatawithLINQ.VisualWebPart1 /code:SPLinq.cs

1 个答案:

答案 0 :(得分:1)

据我所知

第1点:您将执行LINQ查询,您将从内存中的sharepoint读取完整的SPList EmployeesList<EmployeesItem>现在我不知道您是否修改了这些EmployeesItem,这会反映在您的SP列表中吗?你可以自己测试一下。

第2点:您在此处创建Anonymous类型。如果修改此对象,则不会修改EmployeesItem对象。

第3点:这里有内存查询,其中包含IEnumerable匿名类型。除非您评估此IEnumerable(通过执行.ToList()),否则您的EmployeeQuery将无法执行。截至目前,根据您的代码,当您.DataBind()时;您的EmployeeQuery将会执行。

private void BindGrid()
{
   SPLinqDataContext dc = new SPLinqDataContext(SPContext.Current.Web.Url);
   EntityList<EmployeesItem> Employees = dc.GetList<EmployeesItem>("Employees");

   var EmployeeQuery = from e in Employees.ToList() //Point 1
                       select new                   //Point 2
                       {
                           Title = e.Title,
                           FirstName = e.FirstName,
                           Position = e.Position.Title,
                           PositionDescription = e.Position.Description,
                           Department = e.Position.Department.Title
                       };
   GridView1.DataSource = EmployeeQuery;            //Point 3
   GridView1.DataBind();

}

希望这有帮助。