Убедитесь, что коллекция пуста или нет.

public ActionResult Create(FormCollection collection, FormCollection formValue) { try { Project project = new Project(); TryUpdateModel(project, _updateableFields); var devices = collection["devices"]; string[] arr1 = ((string)devices).Split(','); int[] arr2 = Array.ConvertAll(arr1, s => int.Parse(s)); project.User = SessionVariables.AuthenticatedUser; var time = formValue["Date"]; project.Date = time; project.SaveAndFlush(); foreach (int i in arr2) { Device d = Device.Find(i); d.Projects.Add(project); d.SaveAndFlush(); } return RedirectToAction("Index"); } catch (Exception e) { return View(e); } } 

Я хочу обернуть foreach в выражении if, который проверяет,

 var devices = collection["devices"]; 

пуст или нет. Если его пустое для каждого не должно выполняться. Для записи коллекция [“devices”] представляет собой набор значений флажка из формы.

Вам не нужно проверять, пуста ли коллекция, если она пуста, код внутри ForEach не будет выполнен, см. Мой пример ниже.

 using System; using System.Collections.Generic; namespace Test { class Program { static void Main(string[] args) { List emptyList = new List(); foreach (string item in emptyList) { Console.WriteLine("This will not be printed"); } List list = new List(); list.Add("item 1"); list.Add("item 2"); foreach (string item in list) { Console.WriteLine(item); } Console.ReadLine(); } } } 

Вы можете использовать поле Count чтобы проверить, пуста ли коллекция или нет.

поэтому вы получите что-то вроде этого:

 if(devices.Count > 0) { //foreach loop } 

Вы можете использовать метод Any чтобы узнать, является ли коллекция каким-либо элементом.

 if (devices.Any()) { //devices is not empty } 

Ваш код, в его нынешнем виде, не будет работать, поскольку вы говорите, что collection["devices"] представляет собой набор значений флажка, и все же вы передаете ее в string . Вы имеете в виду, что collection – это флажки? Каков точный тип collection ?

Любой объект, который реализует ICollection или ICollection может быть проверен, является ли он пустым или нет, проверяя, имеет ли свойство Count больше нуля.

Как насчет проверки длины массива

 if (arr2.length > 0) { foreach (int i in arr2) { Device d = Device.Find(i); d.Projects.Add(project); d.SaveAndFlush(); } } 

Это работало для меня в Dot Net Core, но только для IEnumerable моделей не сущностей (я получил немного помощи от AutoMapper)

Передайте его как список, затем проверьте Capacity

 IEnumerable podMasters = _podRepository.GetNewPods(PartNumber); IEnumerable podList = Mapper.Map>(podMasters); if (((List)podList).Capacity == 0) { return NotFound(); }