Возникновение ошибки исключения аргументов при извлечении данных из списка запроса с использованием c # в кроссплатформенном проекте xamarin (ios и android) - PullRequest
0 голосов
/ 05 июля 2018

Возникновение ошибки исключения аргументов при извлечении данных из списка запроса с использованием c # в кроссплатформенном проекте xamarin (ios и android). Я пытаюсь получить данные из простых таблиц на Azure (облако). вот мой код

try
{
    var client = new MobileServiceClient("https://eg.azurewebsites.net");
    IMobileServiceTable<Reg> regTable = client.GetTable<Reg>();
    Reg reg = new Reg();

    string imail = uemail2.Text.ToString();

    // This query to seach email
    var email1 = await regTable
        .Where(Reg => Reg.email.ToString() == imail)
        .Select(email => email.Text.ToString())
        .ToListAsync();

    notice3.Text = email1[0].ToString();
}
catch (ArgumentException ex)
{
    notice.Text = "Arguments Error" + ex.Message + ex.StackTrace + ex.HelpLink + ex.Source;
}

ДЕТАЛИ ОШИБКИ

Индекс был вне диапазона. Должен быть неотрицательным и меньше размера Коллекция. Имя параметра: индекс на System.ThrowHelper.ThrowArgumentOutofRange_IndexException .... ... // продолжение ex.Source = mscorlib

Заранее спасибо

Мой обновленный запрос:

 public async Task<ObservableCollection<Reg>> GetTodoItemsAsync(bool syncItems = false)
     {
var client = new MobileServiceClient("https://eg.azurewebsites.net");
             IMobileServiceTable<Reg> regTable = client.GetTable<Reg>();
             Reg reg = new Reg();

             string imail= uemail2.Text.ToString();

         IEnumerable<Reg> items = await regTable
                     .Where(email=> email.Text.ToString() == imail)
                     .ToEnumerableAsync();

         return new ObservableCollection<Reg>(items);
     }

private async void v_OnClicked(object sender, EventArgs e)
    {

var client = new MobileServiceClient("https://eg.azurewebsites.net");
            IMobileServiceTable<Reg> regTable = client.GetTable<Reg>();
            Reg reg = new Reg();

            string imail = uemail2.Text.ToString();

await GetTodoItemsAsync();
            items email3 = new items();



            vnotice2.Text = email3.ToString();
}

1 Ответ

0 голосов
/ 05 июля 2018

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

if(email1.Count > 0)
    notice3.Text = email1[0].ToString();

Возможной причиной получения пустого email1, может быть сравнение строк в предложении where, вы должны игнорировать регистр и сравнивать строки, если вы не уверены, что оба параметра в сравнении имеют одинаковый регистр. Также, если вы хотите получить только одно электронное письмо, вам следует использовать FirstOrDefaultAsync. Измененный запрос будет выглядеть следующим образом.

notice3.Text = await regTable
                .Where(Reg => Reg.email.Equals(imail, StringComparison.OrdinalIgnoreCase))
                .Select(email => email.Text.ToString()).FirstOrDefaultAsync<string>()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...