0

我有几个 SharePoint 列表。我查询一个 SharePoint 列表并根据我的需要获取某些项目。现在我必须查询另一个 SharePoint 列表并从该列表中获取列表项,但我的列表项应该排除我从以前的查询中获得的项。

假设我的列表有值 A、B、C、D 和 E 从我的第一个查询中,我得到值 D 和 E。现在我的第二个查询应该只返回 AB 和 C,然后我将这 3 个项目绑定到一个下拉菜单。

我们怎样才能做到这一点。我是 Linq 或 CAML 查询的新手。

请帮忙。

SPQuery qry = new SPQuery();
                        qry.ViewFields = "<FieldRef Name='Counterparty' />";
                        qry.Query = String.Format(@"   <Where>
                                        <Eq>
                                            <FieldRef Name='Fund' />
                                            <Value Type='Lookup'>{0}</Value>
                                        </Eq>
                                    </Where>", SelectedFund);

                        DataTable FirstDataTable = spList.GetItems(qry).GetDataTable();

SPQuery qry1 = new SPQuery();
                        qry1.Query =
                        @"   <OrderBy> <FieldRef Name='Title' /> </OrderBy>";
                        qry1.ViewFields = "<FieldRef Name='Title' />";

                        DataTable SecondDataTable = spListCP.GetItems(qry1).GetDataTable();

我的 secondtable 更像是返回 ABCDEFGH 值的主表。Firsttable 将返回 A b C D。我想在 dropdwon 中显示 EFGH。

PS:我之前的查询是返回 D 和 E 的 CAML 查询

问候, 卡皮尔·戈赛因

4

2 回答 2

1

您正在寻找的是except()运算符

使用它非常简单。

假设您有一个返回 A 到 E 的列表“allItems”和一个返回 D 和 E 的列表“excludedItems”。

var allItems = from ... //returns A to E
var excludedItems = from ... where x == D || x == E //returns D and E

//output A, B C,     
var filteredResult = allitems.Except(excludedItems).ToList();

如果您发布一些有关如何填充列表并查询它们的代码,我将编辑我的代码以更具体地针对您的个人情况。

亲切的问候

于 2013-10-28T08:15:57.273 回答
0

尝试这个,

public class t
    {           
        public string val { get; set; }
    }
    public class j
    {
        public string val { get; set; }
    }


public ActionResult Index()
        {
            var litT = new List<t>();
            var litJ = new List<j>();
            t objT = new t();
            j objJ = new j();
            objT.val = objJ.val = "A";
            litT.Add(objT);
            litJ.Add(objJ);
            objT.val = objJ.val = "B";
            litT.Add(objT);
            litJ.Add(objJ);
            objT.val ="C";
            litT.Add(objT);

            var result = litT.Where(p => p.val != litJ.Select(k => k.val).ToString()).ToList().Distinct();

            return View();
        }
于 2013-10-28T08:15:59.623 回答