2016-12-03 4 views
0

У меня есть один счет. И у меня есть данные из базы данных. Я хочу найти первое совпадающее слово в соответствии с входящим глаголом.Поиск первого слова, которое соответствует двум предложениям

public class HesapPlanı 
{ 
    public string hesapKodu { get; set; } 
    public string hesapAdi { get; set; } 
} 

запрос

//Actually they come from the database. 
List<HesapPlanı> hesap = new List<HesapPlanı>(); 
hesap.Add(new HesapPlanı { hesapKodu = "100 01 001", hesapAdi = "Kasa" }); 
hesap.Add(new HesapPlanı { hesapKodu = "120 01 001", hesapAdi = "CARİ KART" }); 
hesap.Add(new HesapPlanı { hesapKodu = "340 01 001", hesapAdi = "AFYON ÖDEMESİ" }); 
hesap.Add(new HesapPlanı { hesapKodu = "350 01 001", hesapAdi = "Kasa" }); 
hesap.Add(new HesapPlanı { hesapKodu = "360 02 001", hesapAdi = "STOPAJ ÖDEMESİ" }); 


string kalan = null; 
string[] liste1 = "GELEN EFT - CARİ ÖDEMESİ".Split(new char[] { ' ', '-' }); 
string[] liste2 = null; 
string sorgu = null; 

foreach (var item in hesap.Select(h => h.hesapAdi)) 
{ 
    liste2 = item.Split(new char[] { ' ', '-' }); 
    var kume = liste1.Intersect(liste2); 
    sorgu = liste2.Intersect(kume).FirstOrDefault(); 
    if (!string.IsNullOrWhiteSpace(sorgu)) 
    { 
    kalan = sorgu; 
    } 
} 
Console.WriteLine(hesap.Where(m => m.hesapAdi.Contains(kalan)).FirstOrDefault().hesapKodu); 

В результате этих операций: "340 01 001"

результат, который должен быть на самом деле: "120 01 001"

ответ

1

Потому что цикл после kalan="ÖDEMESİ". Выбранный список из hesapAdi proparty содержит ÖDEMESİ word. И в результате две линии hesapKodu=340 01 001 и hesapKodu=360 02 001 и .FirstOrDefault() возвращение hesapKodu=340 01 001

Вы можете использовать

//Actually they come from the database. 
      List<HesapPlanı> hesap = new List<HesapPlanı>(); 
      hesap.Add(new HesapPlanı { hesapKodu = "100 01 001", hesapAdi = "Kasa" }); 
      hesap.Add(new HesapPlanı { hesapKodu = "120 01 001", hesapAdi = "CARİ KART" }); 
      hesap.Add(new HesapPlanı { hesapKodu = "340 01 001", hesapAdi = "AFYON ÖDEMESİ" }); 
      hesap.Add(new HesapPlanı { hesapKodu = "350 01 001", hesapAdi = "Kasa" }); 
      hesap.Add(new HesapPlanı { hesapKodu = "360 02 001", hesapAdi = "STOPAJ ÖDEMESİ" }); 




     List<string> kalanList =new List<string>(); 
     string[] liste1 = "GELEN EFT - CARİ ÖDEMESİ".Split(new char[] { ' ', '-' }); 
     string[] liste2 = null; 
     string sorgu = null; 

     foreach (var item in hesap.Select(h => h.hesapAdi)) 
     { 
      liste2 = item.Split(new char[] { ' ', '-' }); 
      var kume = liste1.Intersect(liste2).ToList(); 
      sorgu = liste2.Intersect(kume).FirstOrDefault(); 
      if (!string.IsNullOrWhiteSpace(sorgu)) 
      { 
       kalanList .Add(sorgu); 
      } 
     } 


     List<HesapPlanı> resultList = new List<HesapPlanı>(); 
     foreach (var item in kalanList) 
     { 
      resultList.Add(hesap.Where(m => m.hesapAdi.Contains(item)).FirstOrDefault()); 
     } 


     Console.WriteLine(resultList.FirstOrDefault().hesapKodu); 
+0

Результатом является список. Я хотел получить единственный результат: «340 01 001». Результат: «CARİ» Вернуться. –

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