通过从另一个数据表中排除所有元素,从数据表中显示元素

时间:2013-10-25 09:57:22

标签: c# linq list datatable

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

说我的清单有值A,B,C,D和E. 从我的第一个查询,我得到值D和E. 现在我的第二个查询应该只返回A B和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更像是将返回A B C D E F G H值的主表。第一表将返回A b C D. 我在演唱会上表演了E F G H.

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

此致 Kapil Gosain

2 个答案:

答案 0 :(得分:1)

您要找的是Except()运算符

使用它非常简单。

假设你有一个列表“allItems”将A返回给E,列表“excludedItems”返​​回D和E.

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();

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

亲切的问候

答案 1 :(得分: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();
        }