2016-05-09 3 views
0

у меня есть это:цикл для подсчета всех записей на основе параметра

foreach(var item in db.AInfoes) 
{ 
    if (db.MRecords.Any(s => s.AID == item.ID)) 
    { 
     ViewBag.RecordExists = true; 
    } 
    else if(!db.MRecords.Any(s => s.AID == item.ID)) 
    { 
     ViewBag.NoRecordExists = true; 
    } 

} 

Целью этого является, чтобы скрыть ссылку на мой взгляд .cshtml Index. Я хочу прокрутить таблицу AInfoes и проверить, существуют ли какие-либо записи в таблице MRecords на основе внешнего ключа, AID, соответствующих первичному ключу ID.

Тогда в представлении по умолчанию Index есть Edit, Details, Delete ссылки для каждой записи. Я хочу только ссылку Edit, если вы видите ViewBag.NoRecordExists = true. так что если их нет MRecords для этого ID

Мой CSHTML:

@if (!ViewBag.RecordExists) 
{ 
    @Html.ActionLink("Edit Maintenance Record", "Edit", "MaintenanceRecords", new { id = item.ID }) 
} 
@if (ViewBag.NoRecordExists == true) 
{ 
    @Html.ActionLink("Edit Maintenance Record", "Edit", "MaintenanceRecords", new { id = item.ID }) 
} 

В моих MRecords дб Я нарочно проверил это, удалив все MRecords где ID равняется 10 .. но когда я пошел мой индекс, ссылка была там для всех записей .. снова я хочу, чтобы ссылка отображалась только для записей, где есть 0 MRecords

Любая помощь приветствуется.

ответ

2

Ваш запрос невероятно неэффективен. Вместо этого вы должны просто выбрать все возможные AInfoes ids, сначала, а затем запросить для любого MRecords, которые соответствуют.

var aInfoesIds = db.AInfoes.Select(m => m.ID).ToList(); 
ViewBag.RecordExists = db.MRecords.Any(m => aInfoesIds.Contains(m.AID)); 

Кроме того, нет никакой необходимости в ViewBag.NoRecordExists, так как это просто противоположность RecordExists. По вашему мнению:

@{ var recordExists = ViewBag.RecordExists as bool? ?? false; } 

Затем, если вы хотите сделать что-то только тогда, когда запись не существуют, просто свести на нет его:

@if (!recordExists) 
{ 
    ... 
+0

Я сделал изменения, которые вы предложили. в моем '.cshtml' Я поставил:' @if (recordExists) { @ Html.ActionLink («Редактировать записи обслуживания», «Изменить», «MRecords», новый {id = item.ID}) } и я намеренно удалил все 'MRecord', где' ID' равно 10. поэтому мой * Index * View для ** AInfoes ** должен отображать только ссылку * Редактировать * для этой записи. Но вместо этого он показывает ссылку «Изменить» для всех записей в таблице ** AInfoes **, даже если у них есть 'MRecords' –

+0

. Вероятно, это означает, что' ViewBag.RecordExists' либо оценивает значение null (он вообще не установлен), либо просто не может быть передан в bool (он устанавливается на нечто, отличное от булевского типа). В любом случае эта строка кода в вашем представлении затем будет оцениваться как «ложь» в качестве резервной копии. –

+0

'var aInfoesIds = db.AInfoes.Select (x => x.ID) .ToList();' содержит 5 значений '6, 7, 8, 9, 10' ..' ViewBag.RecordExists = db.MRecords.Any (x => aInfoesIds.Contains (x.AID)); 'оценивается как true .. даже если нет каких-либо' MRecords' для 10? –

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