如何合并 2 个共享点列表中的列并将其显示在 ASP.NET GridView 中?

How to Merge a column from 2 sharepoint lists and display it in a ASP.NET GridView?

我有 2 个 Sharepoint 列表。我需要从两个列表中随机选择一些列并将其显示在 ASP.NET GRIDVIEW 中。我已经使用 Linq 完成了这段代码。但我收到一条错误消息,指出该参数为空异常。我可以知道这种错误的原因吗?

using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Linq;
using System.Linq;
using System.Text.RegularExpressions;
using System.Text;
using System.IO;
using System.Diagnostics;


namespace SharePointProject3.VisualWebPart1
{
    public partial class VisualWebPart1UserControl : UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string sQuery = string.Empty;
            string sWebUrl;
            SPListItemCollection objProductListItems = null;
            SPListItemCollection objOrderListItems = null;
            string sViewFields = string.Empty;

            sWebUrl = SPContext.Current.Site.Url;

            sQuery = "<OrderBy><FieldRef Name='Modified' Ascending='FALSE' /></OrderBy>";
            sViewFields = string.Concat("<FieldRef Name='ProductId'/>",
                                               "<FieldRef name= 'ProductName' />",

                                                     "<FieldRef name= 'ProductDescription' />");
            objProductListItems = GetListItems(sWebUrl, "Products", sQuery, sViewFields);

            sViewFields = string.Concat("<FieldRef Name='OrderId'/>",
                                              "<FieldRef name= 'Quantity' />",
                                                "<FieldRef name= 'ProductName' />");

            objOrderListItems = GetListItems(sWebUrl, "Orders", sQuery, sViewFields);

            var Orders = (from itemProduct in objOrderListItems.Cast<SPListItem>()
                          join itemOrder in objOrderListItems.Cast<SPListItem>()
                          on Convert.ToString(itemProduct["ProductName"]) equals Convert.ToString(itemOrder["ProductName"])
                          select new
                          {
                              ProductName = Convert.ToString(itemProduct["ProductName"]),
                              ProductDescription = Convert.ToString(itemProduct["ProductDescription"]),
                              OrderQuantity = Convert.ToString(itemOrder["Quantity"]),
                          }).ToList();

            if(Orders != null)
            {
                GridView1.DataSource = Orders;
                GridView1.DataBind();
            }


        }

        protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

          public static SPListItemCollection GetListItems(string sWebUrl, string sListName, string sQuery, string sviewFields)
        {
            SPListItemCollection objListItemCollection = null;

            SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                using (SPSite objSite = new SPSite(sWebUrl))
                {
                    using (SPWeb objWeb = objSite.OpenWeb())
                    {
                        SPList objList = objWeb.Lists.TryGetList(sListName);
                        if (objList != null)
                        {
                            SPQuery objSPQuery = new SPQuery();
                            objSPQuery.Query = sQuery;
                            objSPQuery.ViewFields = sviewFields;
                            objListItemCollection = objList.GetItems(objSPQuery);
                        }
                    }
                }
            });
            return objListItemCollection;
          }
    }
}

使用 Linq2SharePoint 不是个好主意。这有很多问题。包括性能问题。有时它会产生奇怪的错误并且很难调试它。您在代码中使用 CAML。 CAML 也可以加入。查看 here 如何操作。它由 SharePoint 本身处理,您将获得单个结果集。