2014-08-27 28 views
-1

我的前面的消息是不正確的,不要對其他帖子的答案。方法'First'或'FirstOrDefault'沒有給出正確的數據

這是我遇到問題的部分代碼。

Libelle_TOT和Groupe_Alerte類型爲VARCHAR

foreach (var donneesDUMP in don) 
    { 
     if (cap.Any(c => c.PMRQTOTM == donneesDUMP.PMRQTOTM)) 
     { 
      if(!cap.Any(c => c.Libelle_TOT == donneesDUMP.Libelle_TOT)) 
      { 
       cnn.Resultat.Add(new Resultat 
       { 
        NomTable = "CapitalisationActuelle", 
        Groupe_D_alerte = donneesDUMP.Groupe_Alerte, 
        NomChamp = "PMRQTOTM", 
        TOTMPMRQ = donneesDUMP.PMRQTOTM, 
        SiModifie = "Libelle TOT", 
        LibelléTOTAvant = cap.Select(c => c.Libelle_TOT).FirstOrDefault(), 
        //LibelléTOTAvant = cap.Any(c => !string.IsNullOrEmpty(c.Libelle_TOT)) 
        //? cap.Select(x => x.Libelle_TOT).First(l => !string.IsNullOrEmpty(l)) 
        //: " ", 
        LibelléTOTApres = donneesDUMP.Libelle_TOT, 
        Remarque = "Modifie" 
       }); 
      } 

兩個(50)

LibelléTOTAvant = cap.Select(c => c.Libelle_TOT).FirstOrDefault(), 

LibelléTOTAvant = cap.Any(c => !string.IsNullOrEmpty(c.Libelle_TOT)) 
        ? cap.Select(x => x.Libelle_TOT).First(l => !string.IsNullOrEmpty(l)) 
        : " ", 

的作品,我也沒有任何建築物的錯誤。但每次我遇到一個問題時,可能都會使用.First()和.FirstOrDefault()。它總是寫第一個Libelle_TOT,而不是好的。

這是我所得到的一個例子: http://zupimages.net/viewer.php?id=14/35/6ri4.png

的LibelléTOTAvant有時具有相同的值(TEST5),因爲TEST5是表capitalisationActuelle的第一線,但它是不正確的值。例如,對於LibelléTOTApres= QFD,我應該得到TEST3而不是TEST5等

+1

我不完全確定你期望它應該做什麼?什麼是「好的」?你說你自己「總是寫第一個......」 - 這正是First/FirstOrDefault應該是什麼名字。 – sondergard 2014-08-27 11:25:46

+0

[C#No Overload for method'ToString'需要1個參數](http://stackoverflow.com/questions/25520919/c-sharp-no-overload-for-method-tostring-takes-1-argument) – 2014-08-27 11:25:48

+0

@Slava你真的回答了Slava的其他問題。但現在我的問題是不同的。它的工作原理,但沒有給出正確的答案。 – Kraenys 2014-08-27 11:28:34

回答

1

如果我理解正確的話,你可能需要選擇特定的行匹配當前donneesDUMP的PMRQTOTM:

LibelléTOTAvant = cap.First(c => c.PMRQTOTM == donneesDUMP.PMRQTOTM).LibelleTOT; 

注意,它是第一個(內WHERE條件)選擇行匹配指定condtion ,並首先獲得第一個(現在只有)行 - 與更詳細的版本相同:

LibelléTOTAvant = cap.Where(c => c.PMRQTOTM == donneesDUMP.PMRQTOTM).First().LibelleTOT; 
+0

LibelléTOTAvant= cap.First(c => c.PMRQTOTM == donneesDUMP。 PMRQTOTM).LibelleTOT; 正是我所期待的,非常感謝! – Kraenys 2014-08-27 12:21:11

1

那麼,這:

LibelléTOTAvant = cap.Select(c => c.Libelle_TOT).FirstOrDefault(), 

將只選擇第一個帽Libelle_TOT,因爲你沒有給任何條件

這:

LibelléTOTAvant = cap.Any(c => !string.IsNullOrEmpty(c.Libelle_TOT)) 
        ? cap.Select(x => x.Libelle_TOT).First(l => !string.IsNullOrEmpty(l)) 
        : " ", 

應該選擇第一個非空Libelle_TOT,雖然你可以僅僅通過更換:

LibelléTOTAvant = cap.FirstOrDefault(c => !string.IsNullOrEmpty(c.Libelle_TOT)); 

因爲如果沒有空的libelle,它會給你null。

你只是想選擇第一個非空的libelle?

+0

我不是想要得到第一個非空的libelle。 這是數據庫之一:capitalisationActuelle [鏈接](http://zupimages.net/viewer.php?id=14/35/qcxl.png) 另一個是相同的,具有不同的值。我檢查一個表的「PMRQTOTM」是否存在於另一個表中,如果存在,我檢查「libelleTOT」是否相同。如果它是一個不同的,我將它插入到「LibelléTOTAvant」 – Kraenys 2014-08-27 11:32:40

+0

但問題是,當每個條件驗證(相同的「PMRQTOTM」,不同的「libelleTOT」,它不會插入相應的「libelleTOT」到「LibelléTOTAvant」,但第一個「libelleTOT」的表 – Kraenys 2014-08-27 11:37:11

+1

哎呀,已經回答了,我太晚了,但是,是的,你只是沒有查詢正確的東西 – Damascus 2014-08-27 12:30:42