我有两个相同的集合,1个传递给视图,另一个在显示视图之前存储在会话中。
我们在视图上使用隐藏字段,这些隐藏字段内部是SenderId。当用户提交页面时,我想将提交的SenderId与Session集合中的SenderId进行比较,并使用不匹配的Id填充变量(这意味着用户篡改了隐藏的字段)
这就是我目前所拥有的:
var storedValues = (List<MailBox>)Session["Mail"];
var noMatch = (from x in model where storedValues.Any(s => s.SenderId != x.SenderId) select x.SenderId).ToList();
但无论我做什么,它总是选择所有这些,即使我在视图上更改了SenderId并且在调试时我可以看到我已经篡改的SenderId,我无法做到我的生活得到变量noMatch填充我篡改的不正确的SenderId。
任何帮助都将不胜感激。
更新模型声明:
public class MailBox
{
public Int64 SenderId { get; set; }
public Int64 RecipientId { get; set; }
public string Username { get; set; }
public int TotalMessages { get; set; }
public string PhotoId { get; set; }
public bool NewMessages { get; set; }
public DateTime LastLoggedIn { get; set; }
public DateTime LatestEmailDate { get; set; }
public bool LoggedIn { get; set; }
public string Message { get; set; }
public bool Delete { get; set; }
}
答案 0 :(得分:0)
如果集合的大小相同,则可以使用.Zip()
collection1.Zip(colection2, (col1_item, col2_item) =>
{
if(col1_item.SomeProperty == col2_item.SomeProperty)
{
//
}
});
答案 1 :(得分:0)
我已设法解决此问题,方法如下:
var noMatch = model.Where(item => item.Delete && storedValues.Any(x => x.SenderId == item.SenderId)).Select(item => item.SenderId).ToList();