Список доступа с помощью LINQ в SharePoint - PullRequest
0 голосов
/ 13 января 2012

Я собираюсь получить доступ к списку SharePoint с помощью LINQ и загрузить в сетку.У меня есть списки сотрудников и проектов на сайте точки обмена.

Я нашел код здесь

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 Ответ

1 голос
/ 13 января 2012

Насколько я понимаю

Точка 1 : Вы выполните свой запрос LINQ и прочитаете полный SPList Employees из sharepoint в List<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();

}

Надеюсь, это поможет.

...