2011-12-28 2 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 в Адрес и Страна

OR In Обратный путь, Я хочу сравнить каждый результат запроса с каждой строкой 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», принимающего первый аргумент типа «объект», может быть найден (вам не хватает директивы using или ссылки на сборку?) – venkat

+0

.ToString(). ToLower() then :-) Также ознакомьтесь с моей новой идеей. Немного сложнее, но это будет быстрее. – Flater

+0

Pls предоставить образец/Пример с 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

вы делаете '.select (р => новый Temp()' –

Смежные вопросы