2011-12-28 64 views
0

在.NET 3.5,ASP.NET使用C#合力LINQ查询比较

从下面的查询,

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

我想要得到的查询比较的位置,例如结果,国家的每个DataRow为DataTable位置国家

或以相反的方式, 我想比较每个查询结果与每个DataTable行

我该如何执行相同的操作?

样品数据表:

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

回答

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

注: * A .Where(...).Count >0检查可能是更好的依赖于你将在查询中找到。如果您希望多次点击,使用.Where()代替.SingleOrDefault()

新思路 如果你不介意处理您的DataTable并将其存储在一个IEnumerable,你可以使用LINQ,加入到这两个列表连接。有点难度,但我认为它会更有效率。

+0

我没有找到在行.ToLower()“所在地”] 收到错误: “对象”不包含一个定义对于'ToLower'并且没有扩展方法'ToLower'接受类型'object'的第一个参数可以被发现(你是否缺少using指令或者程序集引用?) – venkat

+0

.ToString()。ToLower()then :-)另外,看看我的新想法。有点棘手,但速度会更快。 – Flater

+0

请提供LINQ-Joins的示例/示例 – venkat

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

我使用列表 收到错误 错误: 错误无法隐式转换类型 'System.Collections.Generic.List ' 到 'System.Collections.Generic.List ' – venkat

+0

你在做'。选择(p =>新的温度()' –