C# 将包含检查为null属性的int数组

C# 将包含检查为null属性的int数组,c#,linq,C#,Linq,我在int[]中有一个属性,我想检查列表中的特定属性是否存在于数组中。这是我的财产类别 public class WaitingLists { [Key] public Int32 Id { get; set; } public Guid UserId { get; set; } public Int32 GameTableId { get; set; } public Int32 WaitingListTy

我在int[]中有一个属性,我想检查列表中的特定属性是否存在于数组中。这是我的财产类别

public class WaitingLists
    {
        [Key]
        public Int32 Id { get; set; }
        public Guid UserId { get; set; }
        public Int32 GameTableId { get; set; }
        public Int32 WaitingListTypeId { get; set; }
        **public Int32 ? StakeBuyInId { get; set; }**
    }
然后我想检查我的列表中是否存在StakeBuyInId

这是Linq的代码

public GameListItem[] GetMyWaitingList(Guid UserId, int[] WaitingListTypeIds, int[] StakeBuyInIds)
        {
            ProviderDB db = new ProviderDB();

            List<GameListItem> objtempGameListItem = new List<GameListItem>();

            List<GameTables> objGameTablesList = new List<GameTables>();

            var objWaitingListUser = db.WaitingLists.Where(x => x.UserId.Equals(UserId));
            if (WaitingListTypeIds != null)
            {
                objWaitingListUser = objWaitingListUser.Where(x => WaitingListTypeIds.Contains(x.WaitingListTypeId));
            }
            **if (StakeBuyInIds != null)
            {
                objWaitingListUser = objWaitingListUser.Where(x => x.StakeBuyInId != null ? StakeBuyInIds.Contains(x.StakeBuyInId) : false);
            }**
            return objtempGameListItem.ToArray();
        }
PublicGameListItem[]GetMyWaitingList(Guid用户ID,int[]WaitingListTypeID,int[]StakeBuyinID)
{
ProviderDB=新的ProviderDB();
List objtempGameListItem=新列表();
List objGameTablesList=新列表();
var objWaitingListUser=db.WaitingLists.Where(x=>x.UserId.Equals(UserId));
if(WaitingListTypeId!=null)
{
objWaitingListUser=objWaitingListUser.Where(x=>WaitingListTypeId.Contains(x.WaitingListTypeId));
}
**if(StakeBuyInIds!=null)
{
objWaitingListUser=objWaitingListUser.Where(x=>x.StakeBuyInId!=null?StakeBuyInIds.Contains(x.StakeBuyInId):false);
}**
返回objtempGameListItem.ToArray();
}
但它向我显示了一个包含不允许“int”的错误。它只重载“int”。那么您知道如何使用linq为null属性使用Contains吗?谢谢你的帮助。

试试看

StakeBuyInIds.Contains((Int32)x.StakeBuyInId)


您还可以创建一个扩展

    public static bool Contains<T>(this IList<T> container, T? content)
    {
        if (content.HasValue)
            if (container.Contains(content.Value))
                return true;

        return false;
    }
而不是

objWaitingListUser = objWaitingListUser.Where(x => x.StakeBuyInId != null 
                                                   ? StakeBuyInIds.Contains(x.StakeBuyInId) 
                                                   : false);

或者更好的
StakeBuyInIds.Contains(x.StakeBuyInId.GetValueOrDefault())
或者
objWaitingListUser=objWaitingListUser.Where(x=>StakeBuyInIds.Contains(x.StakeBuyInId.GetValueOrDefault());
它不起作用var MatchedGroup=query.Where(x=>x.ContentGroupID==cgItem.GroupID&&x.IsInGrpAndPublish!=null&&x.IsInGrpAndPublish==1&&publishedSitesFilter.Contains(x.SiteID.GetValueOrDefault())。选择(x=>new ContentGroupEntity{GroupID=cgItem.GroupID,GroupName=cgItem.GroupName}).FirstOrDefault()工作正常,但在方法签名后需要以下内容:
where T:struct,IComparable
objWaitingListUser = objWaitingListUser.Where(x => StakeBuyInIds.Contains(x.StakeBuyInId))
objWaitingListUser = objWaitingListUser.Where(x => x.StakeBuyInId != null 
                                                   ? StakeBuyInIds.Contains(x.StakeBuyInId) 
                                                   : false);