C# 添加和更新列表对象在C中不起作用#

C# 添加和更新列表对象在C中不起作用#,c#,linq,C#,Linq,C#和Linq的新手 我试图添加一个对象并更新列表中存在的对象。列表未更新或未添加新输入。它未引发任何异常。请帮忙 private IList<SettingsEntity> Settings = new List<SettingsEntity>(); public SettingsRepository() { Settings.Add(new SettingsEntity() { UserID = "alpha", ApplicationNam

C#和Linq的新手

我试图添加一个对象并更新列表中存在的对象。列表未更新或未添加新输入。它未引发任何异常。请帮忙

private IList<SettingsEntity> Settings = new List<SettingsEntity>();

public SettingsRepository() {
            Settings.Add(new SettingsEntity() { UserID = "alpha", ApplicationName = "protocol archive", SettingKey = "RefreshTime", SettingValue = "20", UpdatedOn = new DateTime().Date, SettingLabel = "RefreshInterval", IsActive = true });
            Settings.Add(new SettingsEntity() { UserID = "bravo", ApplicationName = "view", SettingKey = "RefreshRate", SettingValue = "10", UpdatedOn = new DateTime().Date, SettingLabel = "RefreshInterval", IsActive = true });
            Settings.Add(new SettingsEntity() { UserID = "charlie", ApplicationName = "upload", SettingKey = "RefreshTime", SettingValue = "20", UpdatedOn = new DateTime().Date, SettingLabel = "RefreshInterval", IsActive = true });
            Settings.Add(new SettingsEntity() { UserID = "foxtrot", ApplicationName = "protocol archive", SettingKey = "RefreshTime", SettingValue = "20", UpdatedOn = new DateTime().Date, SettingLabel = "RefreshInterval", IsActive = true });
            Settings.Add(new SettingsEntity() { UserID = "lima", ApplicationName = "view", SettingKey = "RefreshTime", SettingValue = "20", UpdatedOn = new DateTime().Date, SettingLabel = "RefreshInterval", IsActive = true });
            Settings.Add(new SettingsEntity() { UserID = "Julie", ApplicationName = "upload", SettingKey = "RefreshTime", SettingValue = "20", UpdatedOn = new DateTime().Date, SettingLabel = "RefreshInterval", IsActive = true });
            Settings.Add(new SettingsEntity() { UserID = "tango", ApplicationName = "protocol archive", SettingKey = "RefreshTime", SettingValue = "20", UpdatedOn = new DateTime().Date, SettingLabel = "RefreshInterval", IsActive = true });
            Settings.Add(new SettingsEntity() { UserID = "victor", ApplicationName = "protocol archive", SettingKey = "RefreshTime", SettingValue = "20", UpdatedOn = new DateTime().Date, SettingLabel = "RefreshInterval", IsActive = true });
            Settings.Add(new SettingsEntity() { UserID = "yankee", ApplicationName = "protocol archive", SettingKey = "RefreshTime", SettingValue = "20", UpdatedOn = new DateTime().Date, SettingLabel = "RefreshInterval", IsActive = true });
            Settings.Add(new SettingsEntity() { UserID = "zulu", ApplicationName = "protocol archive", SettingKey = "RefreshTime", SettingValue = "20", UpdatedOn = new DateTime().Date, SettingLabel = "RefreshInterval", IsActive = true });
        }

 public bool Save(SettingsEntity entity)
        {
            var flag = false;
            if (entity != null)
            {
                var existing = Settings.Where(se => se.UserID == entity.UserID && se.ApplicationName == entity.ApplicationName && se.SettingKey == entity.SettingKey).ToList();
                if (existing != null)
                {
                    existing.ForEach(f => f.SettingValue = entity.SettingValue);
                    flag = true;
                }
                else
                {
                    Settings.Add(entity);
                    flag = true;
                }
                return flag;
            }
            else {
                throw new ArgumentNullException();
            }


        }

 [HttpPost]
        public IActionResult Post([FromBody] SettingsEntity entity)
        {
            var result = _SettingsRepository.Save(entity);
            if (result == true)
            {
                return Ok();
            }
            else
            {
                return BadRequest();
            }
        }
private IList Settings=new List();
公共设置保留(){
Settings.Add(new SettingsEntity(){UserID=“alpha”,ApplicationName=“protocol archive”,SettingKey=“refreshttime”,SettingValue=“20”,UpdatedOn=new DateTime().Date,SettingLabel=“refreshtinterval”,IsActive=true});
Settings.Add(new SettingsEntity(){UserID=“bravo”,ApplicationName=“view”,SettingKey=“RefreshRate”,SettingValue=“10”,UpdatedOn=new DateTime().Date,SettingLabel=“RefreshInterval”,IsActive=true});
Settings.Add(new SettingsEntity(){UserID=“charlie”,ApplicationName=“upload”,SettingKey=“refreshttime”,SettingValue=“20”,UpdatedOn=new DateTime().Date,SettingLabel=“refreshtinterval”,IsActive=true});
Settings.Add(new SettingsEntity(){UserID=“foxtrot”,ApplicationName=“protocol archive”,SettingKey=“refreshttime”,SettingValue=“20”,UpdatedOn=new DateTime().Date,SettingLabel=“refreshtinterval”,IsActive=true});
Settings.Add(new SettingsEntity(){UserID=“lima”,ApplicationName=“view”,SettingKey=“RefreshTime”,SettingValue=“20”,UpdatedOn=new DateTime().Date,SettingLabel=“refreshtinterval”,IsActive=true});
Settings.Add(new SettingsEntity(){UserID=“Julie”,ApplicationName=“upload”,SettingKey=“refreshttime”,SettingValue=“20”,UpdatedOn=new DateTime().Date,SettingLabel=“refreshtinterval”,IsActive=true});
Settings.Add(new SettingsEntity(){UserID=“tango”,ApplicationName=“protocol archive”,SettingKey=“refreshttime”,SettingValue=“20”,UpdatedOn=new DateTime().Date,SettingLabel=“refreshtinterval”,IsActive=true});
Settings.Add(new SettingsEntity(){UserID=“victor”,ApplicationName=“protocol archive”,SettingKey=“refreshttime”,SettingValue=“20”,UpdatedOn=new DateTime().Date,SettingLabel=“refreshtinterval”,IsActive=true});
Settings.Add(new SettingsEntity(){UserID=“yankee”,ApplicationName=“protocol archive”,SettingKey=“refreshttime”,SettingValue=“20”,UpdatedOn=new DateTime().Date,SettingLabel=“refreshtinterval”,IsActive=true});
Settings.Add(new SettingsEntity(){UserID=“zulu”,ApplicationName=“protocol archive”,SettingKey=“refreshttime”,SettingValue=“20”,UpdatedOn=new DateTime().Date,SettingLabel=“refreshtinterval”,IsActive=true});
}
公共布尔保存(设置感知实体)
{
var标志=假;
如果(实体!=null)
{
var existing=Settings.Where(se=>se.UserID==entity.UserID&&se.ApplicationName==entity.ApplicationName&&se.SettingKey==entity.SettingKey).ToList();
if(现有!=null)
{
existing.ForEach(f=>f.SettingValue=entity.SettingValue);
flag=true;
}
其他的
{
设置。添加(实体);
flag=true;
}
返回标志;
}
否则{
抛出新ArgumentNullException();
}
}
[HttpPost]
公共IActionResult Post([FromBody]设置实体)
{
var结果=_SettingsRepository.Save(实体);
如果(结果==真)
{
返回Ok();
}
其他的
{
返回请求();
}
}
这个

将永远不会为
null

因此,将永远不会调用您的
设置.Add(entity)
。您可以编写

if (existing.Any()) //or if (existing.Count > 0)
{ 
    ... 
} 
else 
{ 
    //Save here 
}

Linq查询总是返回Ienumerable集合,该集合包含零个或多个元素。因此,它永远不会为空。此外,还可以跳过flag变量。通过进行计数检查以确保添加了或未添加内容


或者尽量避免使用计数法。因为它具有o(n)的复杂性。因此,如果您只想确保存在任何项,那么更愿意使用any()方法而不是Count()

这不适合你吗?您试图获取的
列表
将永远不会为空(怎么可能?您是从有效的
IEnumerable
中获取的),因此您可以做的是检查
列表
中的元素数

顺便说一句,您将始终返回
true
,因此我删除了它以使您的代码更具可读性

public void Save(SettingsEntity entity)
{
    if (entity == null)
        throw new ArgumentNullException();

    var existing = Settings.Where(se => se.UserID == entity.UserID && se.ApplicationName == entity.ApplicationName && se.SettingKey == entity.SettingKey).ToList();
    if (existing.Count > 0)
        existing.ForEach(f => f.SettingValue = entity.SettingValue);
    else
        Settings.Add(entity);
}

你在哪里调用Save()?@Sajeetharan添加调用方方法什么是
设置
?我认为现有的
将永远不会
为空。它可能是空的,但不是
null
。添加/更新应该可以工作,但如果您不使用singleton存储库,则只需重新创建该列表。还有另一种方法:您可以实现
IComparable
接口,以便根据给定的规则确定实体是否相同。然后你就可以很容易地完成上面的任务了。@MichałTurczyn true,尽管这仍然会返回相同的空列表
public void Save(SettingsEntity entity)
{
    if (entity == null)
        throw new ArgumentNullException();

    var existing = Settings.Where(se => se.UserID == entity.UserID && se.ApplicationName == entity.ApplicationName && se.SettingKey == entity.SettingKey).ToList();
    if (existing.Count > 0)
        existing.ForEach(f => f.SettingValue = entity.SettingValue);
    else
        Settings.Add(entity);
}