linq 为null属性检查int数组中的Contains

vyu0f0g1  于 2023-07-31  发布在  其他
关注(0)|答案(2)|浏览(88)

我在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();
        }


但是它显示了一个错误,即Contains不允许int?。它只重载了int
如何使用linq为null属性使用Contains?谢谢你的帮助

fkaflof6

fkaflof61#

尝试

StakeBuyInIds.Contains((Int32)x.StakeBuyInId)

字符串

objWaitingListUser = objWaitingListUser.Where(x => 
                 x.StakeBuyInId.HasValue  && 
                 StakeBuyInIds.Contains((Int32)x.StakeBuyInId));

nnvyjq4y

nnvyjq4y2#

你也可以创建一个扩展

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 => StakeBuyInIds.Contains(x.StakeBuyInId))


而不是

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

相关问题