结果LinQ查询进行比较

本文关键字:比较 查询 LinQ 结果 | 更新日期: 2023-09-27 18:19:00

. NET使用c#

从下面的查询,

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

我想比较生成的查询结果,如Location, Country与DataTableLocationCountry

的每个DataRow

OR反过来,我想比较每个查询结果与每个数据表行

如何执行相同的操作?

样本数据表:

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

结果LinQ查询进行比较

检查是否匹配:

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连接两个列表。有点难,但我认为这会更有效率。

试试这个

创建一个类

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
    }
}

机密数据库呢?见http://gehirnwindung.de/post/2010/05/19/LINQ-Extension-Methods-Intersect.aspx