2014-02-21 26 views
0

我遇到了從linq查詢中填充下拉菜單的問題。這裏是我的代碼片段:使用SelectList從linq中獲取文本到下拉菜單時出現錯誤

theList = new SelectList(from e in db.MyTab 
         join f in db.MyOtherTab on e.TypeId equals MyOtherTab.TypeId 
         select new 
         { 
          Text = e.Name + " " 
             + e.Code + " " 
             + f.TypeDescription + " " 
             + e.Class + " " 
             + e.Series + " " 
             + SqlFunctions.StringConvert(e.InterestRate), 
          Value = e.Id 
         }, "Value", "Text"); 

兩個e.Namee.Code是在我的表varchar(50)InterestRatedecimal,因此SqlFunctions.StringConvert功能。

NameCodeClassSeriesTypeDescription是我的表varchar類型。

這工作如果NameCodeClassSeriesTypeDescription是文字或字母數字。問題是如果Name,Code,ClassSeries是數字(儘管類型爲varchar),則填充SelectList

如果是這種情況,則下拉列表中有一個空行。

我不明白這是爲什麼。如果它是一個varchar,它應該無關緊要,如果它是「123」,它仍然是一個varchar,對吧?也許這不是問題,但是,檢查這些表,如果ame,Code,Class和Series是數字,則下拉列中的行爲空白是一致的。

有誰知道我該如何解決這個問題?

謝謝。

+1

有沒有規定說你必須在一個聲明中做的一切 – Jonesopolis

回答

0

既然你沒有包括數據,我猜測真正的問題是數據中的空值。這可以通過執行查詢這種方式清理:

List = new SelectList(from e in db.MyTab 
      join f in db.MyOtherTab on e.TypeId equals MyOtherTab.TypeId 
      where (e.Name != null && 
        e.Code != null && 
        f.TypeDescription != null && 
        e.Class != null && 
        e.Series != null && 
        e.InterestRate != null) 
      select new 
      { 
       Text = e.Name + " " 
         + e.Code + " " 
         + f.TypeDescription + " " 
         + e.Class + " " 
         + e.Series + " " 
         + SqlFunctions.StringConvert(e.InterestRate), 
       Value = e.Id 
      }, "Value", "Text"); 

有可能是寫的where子句一個更好的辦法,但我知道這會工作。

0

試試這個:

var query = (from e in db.MyTab 
      join f in db.MyOtherTab on e.TypeId equals MyOtherTab.TypeId 
      select new 
      { 
       Tab = e, 
       OtherTab = f 
      }).ToList(); 

var list = new SelectList(query.Select(e=> 
       new 
       { 
        Text = string.Format("{0} {1} {2} {3} {4} {5}", e.Tab.Name,e.Tab.Code, e.OtherTab.TypeDescription ,e.Tab.Class ,e.Tab.Series ,e.Tab.InterestRate), 
        Value = e.Tab.Id 
       }, "Value", "Text"); 
相關問題