检查列表中是否存在

时间:2015-03-09 10:04:12

标签: c# asp.net-mvc

我有这个模型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

我该怎么做?

2 个答案:

答案 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)