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