У меня есть контроллер ASP.NET MVC, который перебирает массив, отправленный через ajax. Мне нужно получить одно значение Guid из другой модели представления, которую я создал. Эти значения являются статическими и основаны на внутренней таблице.
Я добавлю это значение вместе с другими в базу данных, которую я настроил для него. Foreach проходит по циклу и вставляет несколько строк в зависимости от размера массива. Проблема в том, что когда я запускаю запрос LINQ внутри оператора using и foreach, я получаю ошибку «Последовательность не содержит элементов». Как только я беру запрос LINQ за его пределы (см. Второй пример), он возвращает индивидуальное значение.
Я не могу этого сделать, потому что мне нужно вставить определенное значение, поскольку оно циклически повторяется на основе значений индекса массива.
Я пробовал несколько решений на этом, и ни одно из них не достигает этого. Когда я использую просто .Single (), он говорит мне, что в моей последовательности нет элементов. Когда я использую single или default, он вставляет значение Guid только с нулями. Я пробовал SingleOrDefault () .., который вставляет Guid только с нулями. Я прочитал и посмотрел на другие вопросы и ссылки .. Начал с этого, но без ответа .. c # LINQ: как получить единственный результат
Вот пример одного изконтроллер.
// Action Method
[HttpPost]
public ActionResult MyAction(string[] values, string uniqline, string uniqpolicy, string uniqlinetype)
{
Guid UniqLineType = Guid.Parse(uniqlinetype); // This is the Line guid
int ul = Convert.ToInt32(uniqline); // UniqLine
int up = Convert.ToInt32(uniqpolicy); // UniqPolicy
// Make a list of sublines
List<getSublineTypeVM> subLine;
using (TruckingDb db = new TruckingDb())
{
subLine = db.getSublines.ToArray().OrderBy(x => x.RID)
.Select(x => new getSublineTypeVM(x)).ToList();
Guid newGuid;
foreach (var item in values)
{
TestTableCIF dto = new TestTableCIF();
var ust = (from u in subLine
where (u.UniqLineType == UniqLineType && u.SubLine_Name == item)
select new { u.UniqSublineType }).Single();
newGuid = Guid.Parse(ust.ToString());
// here's where we will DTO
// might look like
dto.UniqSublineID = Guid.NewGuid(); // Table primary key
dto.UniqSublineType = ust.UniqSublineType; ; // this will have to be the LineName instead. for now use the line type GUid
dto.UniqLineType = UniqLineType;
dto.UniqLine = ul;
dto.UniqPolicy = up;
dto.Selected = true;
dto.LineName = item;
db.TestTableCIFs.Add(dto);
}
db.SaveChanges();
}
return Content ("Works McGoogle");
}
Во втором примере я перемещаю запрос LINQ за пределы оператора using. Я могу получить правильное значение, но только одно, потому что мне нужно использовать статическое сравнение в запросе.
// Action Method
[HttpPost]
public ActionResult MyAction(string[] values, string uniqline, string uniqpolicy, string uniqlinetype)
{
Guid UniqLineType = Guid.Parse(uniqlinetype); // This is the Line guid
int ul = Convert.ToInt32(uniqline); // UniqLine
int up = Convert.ToInt32(uniqpolicy); // UniqPolicy
// Make a list of sublines
List<getSublineTypeVM> subLine;
using (TruckingDb db = new TruckingDb())
{
subLine = db.getSublines.ToArray().OrderBy(x => x.RID)
.Select(x => new getSublineTypeVM(x)).ToList();
Guid newGuid;
foreach (var item in values)
{
TestTableCIF dto = new TestTableCIF();
newGuid = Guid.Parse(ust.ToString());
// here's where we will DTO
// might look like
dto.UniqSublineID = Guid.NewGuid(); // Table primary key
dto.UniqSublineType = Random and left out for brevity ; //this will have to be the LineName instead. for now use the line type GUid
dto.UniqLineType = UniqLineType;
dto.UniqLine = ul;
dto.UniqPolicy = up;
dto.Selected = true;
dto.LineName = item;
db.TestTableCIFs.Add(dto);
}
db.SaveChanges();
}
var ust = (from u in subLine
where (u.UniqLineType == UniqLineType && u.SubLine_Name == "BI/PD")
select new { u.UniqSublineType }).Single();
// This works, but only returns one value based on the static search
return Content ("It worked");
}
Я ожидаю, что запрос вернет правильное значение и передаст вместе с другими значениями. Тем не менее, последовательность либо пуста, либо просто вставляет Guid, который имеет только нули. Не фактическое значение guid, извлеченное из запроса. Любая помощь будет принята с благодарностью.