在跨平台xamarin项目(ios和android)中使用c#从查询列表中检索数据时面临参数exception错误

在跨平台xamarin项目(ios和android)中使用c#从查询列表中检索数据时遇到参数exception错误。 我试图从azure色(云)上的简单表中检索数据。 这是我的代码

try { var client = new MobileServiceClient("https://eg.azurewebsites.net"); IMobileServiceTable regTable = client.GetTable(); 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> GetTodoItemsAsync(bool syncItems = false) { var client = new MobileServiceClient("https://eg.azurewebsites.net"); IMobileServiceTable regTable = client.GetTable(); Reg reg = new Reg(); string imail= uemail2.Text.ToString(); IEnumerable items = await regTable .Where(email=> email.Text.ToString() == imail) .ToEnumerableAsync(); return new ObservableCollection(items); } private async void v_OnClicked(object sender, EventArgs e) { var client = new MobileServiceClient("https://eg.azurewebsites.net"); IMobileServiceTable regTable = client.GetTable(); Reg reg = new Reg(); string imail = uemail2.Text.ToString(); await GetTodoItemsAsync(); items email3 = new items(); vnotice2.Text = email3.ToString(); } 

似乎email1是空的,因此它无法在列表中找到第一个元素并将索引从exception中删除。 您应该在访问该列表的任何元素之前validation列表。

 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()