2015-06-04 3 views
0

Можете ли вы рассказать мне, как выбрать несколько строк с большим количеством разных идентификаторов в таблице и сохранить их в ViewBag?Множественная привязка к списку объектов в asp.net mvc

Эта линия может получить все строки с идентификатором является "123": ViewBag.Name = (from m in myDatabase.myTable where m.id == "123" select m).ToList();

Назвав его в Вид:

<tr> 
foreach(var item in ViewBag.Name) 
{ 
    <td>@item.ProductName</td> 
    <td>@item.Category</td> 
} 
</tr> 

Сейчас. У меня есть список для хранения значений id. Как это:

List<string> list = new List<string>(); 
list.Add("123"); 
list.Add("456"); 
list.Add("789"); 
//..... 

И маркированного полного цикла:

foreach(var item in list) 
{ 
    // ViewBag.Name = from m in myDatabase.myTable where .......... 
} 

Пожалуйста, помогите!

+0

Во-первых, не используйте 'ViewBag'. –

+0

Попробуйте 'from m в myDatabase.myTable, где list.Contains (m.id) выберите m'. –

+1

Это так неправильно на стольких уровнях. В принципе, я думаю, что вы хотите что-то вроде 'ViewBag.Names = (от m в myDatabase.myTable, где m.id ==" 123 "|| m.id ==" 456 "|| m.id ==" 789 "выберите m .Name) .ToList(); ' –

ответ

0

Заменить List с HashSet (небольшой оптимизации):

HashSet<string> list = new HashSet<string>(); 
list.Add("123"); 
list.Add("456"); 
list.Add("789"); 
// ... 

Запрос:

ViewBag.Name = (from m in myDatabase.myTable 
       where list.Contains(m.id) 
       select m).ToList(); 

Добавить модель для просмотра, и поместить результат в модели, а не в ViewBag.

0

ViewBag.Name представляет собой динамический тип, который становится назначен List<myTable>

Вы можете использовать FirstOrDefault найти пункт в существующем списке.

foreach(var item in list) 
{ 
    var name = ViewBag.Name.FirstOrDefault(x=>x.ID == item); 
    if (name != null) 
    { 
     <td>@name.ProductName</td> 
     <td>@name.Category</td> 
    } 
} 

Пара пунктов:

  • ViewBag.Name будет лучше назван за то, что он, например, ViewBag.MyTableList или даже просто множественном ViewBag.Names
  • вы можете найти связывание легче, если вы используете сильно определенную ViewModel модель , а не ViewBag
  • в зависимости от количества строк, вы можете сделать это более эффективным

Трудно сказать, где установлены ViewBag.Name и list. Если они оба находятся в коде, тогда вы можете фильтровать выбор данных, а не фильтровать в пользовательском интерфейсе, - это было бы более эффективно.

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