2014-02-21 25 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"); 
相关问题