结果LinQ查询进行比较

时间:2011-12-28 11:57:02

标签: c# linq .net-3.5 asp.net-3.5

在.NET 3.5中,使用C#的ASP.NET

从下面的查询中

var query = table.AsEnumerable()
             .Where(p => p.Field<string>("Customer_Code") == "1001")
             .Select(p => new 
                           {
                              Location = p.Field<string>("Location"),
                              Country = p.Field<string>("Country")
                           })
              .Distinct();

我想比较结果查询结果,例如位置,国家/地区与 DataTable 位置国家<的每个DataRow / em>的

或反过来, 我想将每个查询结果与每个DataTable Row进行比较

我该如何表现呢?

数据表示例:

Location     Country
Bangalore    India
Hyderabad    India
Florida       USA
London        UK
Delhi        India

3 个答案:

答案 0 :(得分:1)

试试这个

创建一个类

Class Temp
{
    public String Location {get;set;}
    public String Country {get;set;}
}

然后

List<Temp> list = table.AsEnumerable()
             .Where(p => p.Field<string>("Customer_Code") == "1001")
             .Select(p => new Temp()
                           {
                              Location = p.Field<string>("Location"),
                              Country = p.Field<string>("Country")
                           })
             .Distinct().ToList();

然后像这样比较

foreach (Temp t in list)
{
    foreach(DataRow row in table.Rows)
    {
       //do your comparison
    }
}

答案 1 :(得分:1)

如何进行以下操作以检查匹配项:

foreach(DataRow row in table.Rows)
{
   var result = query.SingleOrDefault(x=> 
            x.Location.ToLower() = row["Location"].ToLower() 
            && x.Country.ToLower() = row["Country"].ToLower()
        );
   if(result != null)
   {
        //Hurray, result is a match!
   }
}

注意:的 * .Where(...).Count >0检查可能更好地取决于您在查询中找到的内容。如果您预计会有多次点击,请使用.Where()代替.SingleOrDefault()

新想法 如果您不介意处理DataTable并将其存储在IEnumerable中,则可以使用LINQ-joins连接这两个列表。有点难,但我认为它会更有效率。

答案 2 :(得分:1)