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 を使用するには、LINQ to SharePoint プロキシ コードを生成する必要があります。 spmetal.exe /web:http://localhost/sites/MySampleWebSite /namespace:AccessSPDatawithLINQ.VisualWebPart1 /code:SPLinq.cs

4

1 に答える 1

1

私の理解では

ポイント 1 : LINQ クエリを実行し、完全な SPList を共有ポイントからメモリ内に読み取りEmployeesますList<EmployeesItem>これらを変更するかどうかはわかりませんがEmployeesItem、SP リストに反映されますか? これは自分でテストできます。

ポイント 2 : ここでは匿名型を作成しています。このオブジェクトを変更しても、EmployeesItemオブジェクトは変更されません。

ポイント 3IEnumerable : ここでは、匿名型のメモリ内クエリがあります。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 に答える