我一直收到这个错误,“当前值'String.Empty'类型与预期的'System.Boolean'类型不兼容”,当我尝试从Azure表中循环一堆实体时,我是只是使用Azure的新手,所以这可能是非常容易的,我得到的错误。
我的代码:
private void registerButton_Click(object sender, RoutedEventArgs e)
{
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(RoleEnvironment.GetConfigurationSettingValue("StorageConnectionString"));
// Create the table client
CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
// Get the data service context
TableServiceContext serviceContext = tableClient.GetDataServiceContext();
// Create a new customer entity
user = new UserDetailsEntity();
//Setting the fields of the new userEntity
user.username = usernameText.Text;
user.password = passwordText.Text;
user.subscriptionID = subText.Text;
user.subscriptionName = subscriptionNameText.Text;
user.thumbprint = thumbprintText.Text;
user.email = emailText.Text;
user.phoneNumber = "3530" + numberText.Text;
int rowCount = 1;
CloudTableQuery<UserDetailsEntity> Query = (from en in serviceContext.CreateQuery<UserDetailsEntity>("userdetails")
select en).AsTableServiceQuery<UserDetailsEntity>();
//error occurs in the next line
foreach (UserDetailsEntity ent in Query)
{
rowCount++;
}
user.RowKey = rowCount.ToString();
// Add the new customer to the people table
serviceContext.AddObject("userdetails", user);
// Submit the operation to the table service
serviceContext.SaveChangesWithRetries();
//Set the variables so they can be retrieved when the next screen loads
Application.Current.Properties["username"] = usernameText.Text;
Application.Current.Properties["password"] = passwordText.Text;
Window1 userHome = new Window1();
this.Close(); //to close Password window
userHome.Show(); //to show Main form
}
答案 0 :(得分:2)
如果没有更多代码,我无法确切地告诉您问题的确切位置,但异常是相当明确的。您正在尝试将布尔属性设置为字符串的值。
如果你在代码评论中注意到你的foreach中发生了错误,那么我会检查你的UserDetailsEntity
对象是如何设置的。可能有一个属性设置为布尔值,但您的数据将作为String.Empty返回。你在foreach中得到这个的原因是因为你的LINQ查询的类型是IQueryable,所以它实际上不会执行并填充你的对象,直到你实际访问数据(由你的foreach)*。因此,您可以在UserDetailsEntity属性中放置断点,以查看在查看代码时不是blatent的那个断点。
*请记住,这是N + 1问题,您在循环的每次迭代中调用数据库。您可以通过调用.ToList()将所有数据一次性加载到查询中来解决此问题...如果这对您来说是个问题,那就是。