Как запросить другую таблицу, если в этой таблице нет запрошенных данных в основном веб-API dotnet - PullRequest
0 голосов
/ 13 октября 2018

Я уверен, что есть очень простое решение, но, похоже, я не могу найти решение.Я создал веб-API для возврата некоторых данных в интерфейс, но проблема в том, что я хочу получить доступ к двум таблицам, чтобы сделать это.Если в первой таблице нет запрошенных данных, мне нужно перейти к следующей таблице, в настоящее время я использую простой блок try catch;Я знаю, что это плохой способ сделать это, поэтому код выглядит так:

try
{
    var answers = await _context.OfferedAnswers.FirstOrDefaultAsync(s => s.Id == answerId);
    answerText = answers.Value;
}
catch (Exception)
{
    var answers = await _context.Cols.FirstOrDefaultAsync(s => s.Id == answerId);
    answerText = answers.Label;
}

Пожалуйста, кто-нибудь может предложить мне лучший способ для этого?Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 13 октября 2018

Вы можете проверить, является ли ответ нулевым, прежде чем получить доступ к его свойствам.Как это:

If (answer == null)
....
0 голосов
/ 15 октября 2018

Для стандартного способа вы должны проверить, является ли answers нулем вместо try catech exception.

Для демонстрационного кода, например:

string answerText;
var answers = await _context.OfferedAnswers.FirstOrDefaultAsync(s => s.Id == answerId);
if(answers == null)
{
   var cols = await _context.Cols.FirstOrDefaultAsync(s => s.Id == answerId);
   answerText = cols.Label;
}
else
{ 
    answerText = answers.Value;
}

Для другого способа попробуйте запрос linq.

            var answerText =await (from f in _context.OfferedAnswers.Where(ft => ft.Id == id)
                          select f.Value)
                         .Union(
                          from s in _context.Cols.Where(st => st.Id == id)
                          select s.Label)
                         .FirstOrDefaultAsync();
0 голосов
/ 13 октября 2018

Предполагая, что answers.Value и answers.Label возвращают один и тот же тип, это то, что я могу придумать с моей головы.Я не пробовал это раньше, так что это может / не может работать.Если это работает, вам просто нужно выяснить, как использовать ключевое слово await.Не уверен, может ли он просто ударить по передней или нет.

answerText = _context.OfferedAnswers.FirstOrDefaultAsync(s => s.Id == answerId) == null ? answers.Label : answers.Value;

...