C# 无法更改布尔值

C# 无法更改布尔值,c#,boolean,C#,Boolean,一旦到期日结束,我将自动停用该用户。因此,在查看用户帐户详细信息时,超过到期日期的用户的帐户应显示为非活动状态(使用fa开关打开/关闭-显示帐户的活动/非活动状态-在代码中为布尔值true/false) 现有: public IEnumerable<CustomerDetails> GetCustomerDetails(string groupName) { IEnumerable<CustomerDetails> customers; var quer

一旦到期日结束,我将自动停用该用户。因此,在查看用户帐户详细信息时,超过到期日期的用户的帐户应显示为非活动状态(使用fa开关打开/关闭-显示帐户的活动/非活动状态-在代码中为布尔值true/false)

现有:

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
    …尝试更改
    退货客户
    to
    return customers.ToArray()
    并查看问题是否消失。正如@Ian所说,问题在于执行延迟,您实际上是在两次枚举查询,每次都会给您一个新的
    客户详细信息列表。因此,当UI显示列表时,它不会显示您对第一个列表所做的更改。通常,不要在数据库中存储可以从现有数据计算得出的数据。如果将非活动用户定义为过期日期在过去的用户,为什么需要存储
    IsActiveUser
    ?感谢您向我解释此问题。现在我明白了。