0

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

我在这里找到了一些代码

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

4

1 回答 1

1

据我了解

第 1 点:您将执行 LINQ 查询,并将完整的 SPListEmployees从共享点读取到List<EmployeesItem>内存中。现在我不知道如果你修改这些EmployeesItem,会反映在你的SP列表中吗?你可以自己测试一下。

第 2 点:在这里您正在创建一个匿名类型。如果您修改此对象,它不会修改您的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();

}

希望这可以帮助。

于 2012-01-13T06:05:15.857 回答