我有这个模型clas:
public class usersInDashboard
{
public string Name { get; set; }
public string fbID { get; set; }
public string firstName { get; set; }
public string lastName { get; set; }
public int? countOfBid { get; set; }
}
这是我的控制器 ...
var participants = from q in db.firstWeekBids
where q.bidedItem == "laptop"
join w in db.Users
on q.userId equals w.Id
select new { q.bidCount };
var model = new List<usersInDashboard>();
foreach (var prt in participants)
{
var userDash = new usersInDashboard();
userDash.fbID = user.id;
if (model.Contains((userDash.fbID))
{
...
}
else
{
userDash.fbID = user.id;
userDash.firstName = user.name;
userDash.countOfBid = prt.bidCount;
model.Add(userDash);
}
}
return PartialView(model);
我需要检查我的列表中是否存在此fbID。 user.id是字符串,它等于fbID。
我已经尝试了if (model.Contains((userDash.fbID))
但它会抛出异常
错误1最佳重载方法匹配 'System.Collections.Generic.List.Contains(BlaBlaBla.Models.usersInDashboard)' 有一些无效的参数C:\ Users \ John \ Documents \ visual studio 2013 \ Projects \ BlaBlaBla \ BlaBlaBla \ Controllers \ AuctionController.cs 67 21
我该怎么做?
答案 0 :(得分:7)
Contains
方法通过使用默认的相等比较器来确定序列是否包含指定的元素(如果您没有创建自定义元素)。如果您想知道,序列的任何元素是否与指定的数据一起存在,那么使用带谓词的Any()
重载而不是Contains()
:
model.Any(x => x.fbID == userDash.fbID);
如果您仍想使用Contains
,则可以创建自己的比较器,或者您的模型应该实现System.IEquatable
。或者尝试@teovankot回答。
但是,正如我所说,如果你想确定集合中的任何元素是否符合某个条件,那么你必须使用Any()
。
答案 1 :(得分:3)
@Farhad方式是我认为最好的方式,但如果您仍然想使用Contains
,您可以这样写:
model.Select(x => x.fbID).Contains(userDash.fbID)