C# 无法更改布尔值
一旦到期日结束,我将自动停用该用户。因此,在查看用户帐户详细信息时,超过到期日期的用户的帐户应显示为非活动状态(使用fa开关打开/关闭-显示帐户的活动/非活动状态-在代码中为布尔值true/false) 现有:C# 无法更改布尔值,c#,boolean,C#,Boolean,一旦到期日结束,我将自动停用该用户。因此,在查看用户帐户详细信息时,超过到期日期的用户的帐户应显示为非活动状态(使用fa开关打开/关闭-显示帐户的活动/非活动状态-在代码中为布尔值true/false) 现有: public IEnumerable<CustomerDetails> GetCustomerDetails(string groupName) { IEnumerable<CustomerDetails> customers; var quer
public IEnumerable<CustomerDetails> GetCustomerDetails(string groupName)
{
IEnumerable<CustomerDetails> customers;
var query = "select up.username, up.firstname, up.lastname, up.lastactivitydate, up.expirydate, " +
"up.activationdate, up.licensedby, up.position, up.isactive as isActiveUser, " +
"wr.rolename, up.usergroup, ul.contracttype as contracttype, ul.numberoflicense as " +
"licensesallowed from userprofile up inner join userlicense ul on ul.id = up.firmid inner join " +
"webpages_UsersInRoles wur on wur.userid = up.userid inner join webpages_Roles wr on " +
"wr.roleid = wur.roleid where ul.firmname='" + firmname.Replace("'", "''") + "' order by up.lastname";
using (IDbConnection dbConnection = new SqlConnection(UserDBConnectionString))
{
dbConnection.Open();
using (var result = dbConnection.QueryMultiple(query, commandTimeout: 300))
{
var accounts = result.Read().ToList();
customers = from account in accounts
select new CustomerDetails
{
FirstName = account.firstname,
LastName = account.lastname,
UserName = account.username,
PreviousUserName = account.username,
Position = account.position,
SharedSpace = JsonConvert.DeserializeObject<string[]>(account.usergroup),
UserRole = account.rolename,
IsActiveUser = account.isActiveUser,
LastActivityDate = account.lastactivitydate != null
? account.lastactivitydate.ToString("yyyy/MM/dd")
: "",
ExpiryDate = TimeZoneInfo.ConvertTimeToUtc((DateTime)account.expirydate),
ActivationDate = TimeZoneInfo.ConvertTimeToUtc((DateTime)account.activationdate),
ContractType = account.contracttype.ToString().Trim(),
LicensesAllowed = account.licensesallowed
};
}
}
return customers;
}
public IEnumerable<CustomerDetails> GetCustomerDetails(string groupName)
{
IEnumerable<CustomerDetails> customers;
var query = "select up.username, up.firstname, up.lastname, up.lastactivitydate, up.expirydate, " +
"up.activationdate, up.licensedby, up.position, up.isactive as isActiveUser, " +
"wr.rolename, up.usergroup, ul.contracttype as contracttype, ul.numberoflicense as " +
"licensesallowed from userprofile up inner join userlicense ul on ul.id = up.firmid inner join " +
"webpages_UsersInRoles wur on wur.userid = up.userid inner join webpages_Roles wr on " +
"wr.roleid = wur.roleid where ul.firmname='" + firmname.Replace("'", "''") + "' order by up.lastname";
using (IDbConnection dbConnection = new SqlConnection(UserDBConnectionString))
{
dbConnection.Open();
using (var result = dbConnection.QueryMultiple(query, commandTimeout: 300))
{
var accounts = result.Read().ToList();
customers = from account in accounts
select new CustomerDetails
{
FirstName = account.firstname,
LastName = account.lastname,
UserName = account.username,
PreviousUserName = account.username,
Position = account.position,
SharedSpace = JsonConvert.DeserializeObject<string[]>(account.usergroup),
UserRole = account.rolename,
IsActiveUser = account.isActiveUser,
LastActivityDate = account.lastactivitydate != null
? account.lastactivitydate.ToString("yyyy/MM/dd")
: "",
ExpiryDate = TimeZoneInfo.ConvertTimeToUtc((DateTime)account.expirydate),
ActivationDate = TimeZoneInfo.ConvertTimeToUtc((DateTime)account.activationdate),
ContractType = account.contracttype.ToString().Trim(),
LicensesAllowed = account.licensesallowed
};
}
}
return customers;
}
编辑-1:
public IEnumerable<CustomerDetails> GetCustomerDetails(string groupName)
{
IEnumerable<CustomerDetails> customers;
var query = "select up.username, up.firstname, up.lastname, up.lastactivitydate, up.expirydate, " +
"up.activationdate, up.licensedby, up.position, up.isactive as isActiveUser, " +
"wr.rolename, up.usergroup, ul.contracttype as contracttype, ul.numberoflicense as " +
"licensesallowed from userprofile up inner join userlicense ul on ul.id = up.firmid inner join " +
"webpages_UsersInRoles wur on wur.userid = up.userid inner join webpages_Roles wr on " +
"wr.roleid = wur.roleid where ul.firmname='" + firmname.Replace("'", "''") + "' order by up.lastname";
using (IDbConnection dbConnection = new SqlConnection(UserDBConnectionString))
{
dbConnection.Open();
using (var result = dbConnection.QueryMultiple(query, commandTimeout: 300))
{
var accounts = result.Read().ToList();
customers = from account in accounts
select new CustomerDetails
{
FirstName = account.firstname,
LastName = account.lastname,
UserName = account.username,
PreviousUserName = account.username,
Position = account.position,
SharedSpace = JsonConvert.DeserializeObject<string[]>(account.usergroup),
UserRole = account.rolename,
IsActiveUser = account.isActiveUser,
LastActivityDate = account.lastactivitydate != null
? account.lastactivitydate.ToString("yyyy/MM/dd")
: "",
ExpiryDate = TimeZoneInfo.ConvertTimeToUtc((DateTime)account.expirydate),
ActivationDate = TimeZoneInfo.ConvertTimeToUtc((DateTime)account.activationdate),
ContractType = account.contracttype.ToString().Trim(),
LicensesAllowed = account.licensesallowed
};
}
}
return customers;
}
正如我在评论中所说,我可以将这里的值从true改为false,反之亦然
编辑-2:
public IEnumerable<CustomerDetails> GetCustomerDetails(string groupName)
{
IEnumerable<CustomerDetails> customers;
var query = "select up.username, up.firstname, up.lastname, up.lastactivitydate, up.expirydate, " +
"up.activationdate, up.licensedby, up.position, up.isactive as isActiveUser, " +
"wr.rolename, up.usergroup, ul.contracttype as contracttype, ul.numberoflicense as " +
"licensesallowed from userprofile up inner join userlicense ul on ul.id = up.firmid inner join " +
"webpages_UsersInRoles wur on wur.userid = up.userid inner join webpages_Roles wr on " +
"wr.roleid = wur.roleid where ul.firmname='" + firmname.Replace("'", "''") + "' order by up.lastname";
using (IDbConnection dbConnection = new SqlConnection(UserDBConnectionString))
{
dbConnection.Open();
using (var result = dbConnection.QueryMultiple(query, commandTimeout: 300))
{
var accounts = result.Read().ToList();
customers = from account in accounts
select new CustomerDetails
{
FirstName = account.firstname,
LastName = account.lastname,
UserName = account.username,
PreviousUserName = account.username,
Position = account.position,
SharedSpace = JsonConvert.DeserializeObject<string[]>(account.usergroup),
UserRole = account.rolename,
IsActiveUser = account.isActiveUser,
LastActivityDate = account.lastactivitydate != null
? account.lastactivitydate.ToString("yyyy/MM/dd")
: "",
ExpiryDate = TimeZoneInfo.ConvertTimeToUtc((DateTime)account.expirydate),
ActivationDate = TimeZoneInfo.ConvertTimeToUtc((DateTime)account.activationdate),
ContractType = account.contracttype.ToString().Trim(),
LicensesAllowed = account.licensesallowed
};
}
}
return customers;
}
//客户类别结构
public class CustomerDetails
{
public string FirstName { get; set; }
public string LastName { get; set; }
public bool IsActiveUser { get; set; }
// some other fields ... goes here
}
我不知道在将值设置为false之后,它如何仍然是真的 你是暴力的受害者
在这里,您可以在每次呼叫客户时查询数据库三次
var beforeChanged = customers.ElementAt(i).IsActiveUser;
customers.ElementAt(i).IsActiveUser = false;
var afterChanged = customers.ElementAt(i).IsActiveUser;
每次都从数据库加载对象,这就是为什么看不到任何更改。数据库保持不变
在构建select时,您需要具体化查询,可以通过调用客户上的.ToArray()
或ToList()
。问题:客户是一个IEnumerable/IQueryable,而不是一个固定列表。它是“如何交付对象的定义”,而不是实际或稳定对象的列表每次对“元素”的引用都会导致客户查阅其来源(列表),并在检索时创建全新的对象。每一个单身。。。时间
解决方案:确保使用持久化函数(如ToArray()或ToList())创建客户。能否向我们显示CustomerDetails类?可能是因为执行延迟?您的客户
似乎属于IEnumerable
类型。另一种可能性是,由于IsActiveUser
是属性
,其设置器
可能由于某些内部原因不允许您将值设置为false
…尝试更改退货客户
toreturn customers.ToArray()
并查看问题是否消失。正如@Ian所说,问题在于执行延迟,您实际上是在两次枚举查询,每次都会给您一个新的客户详细信息列表。因此,当UI显示列表时,它不会显示您对第一个列表所做的更改。通常,不要在数据库中存储可以从现有数据计算得出的数据。如果将非活动用户定义为过期日期在过去的用户,为什么需要存储IsActiveUser
?感谢您向我解释此问题。现在我明白了。