我在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();
}
但它向我显示包含不允许&#39; int的错误? &#39 ;.它只会超载&#39; int&#39;。所以你有任何想法如何使用linq使用Contains for null属性?谢谢你的帮助。
答案 0 :(得分:5)
尝试
StakeBuyInIds.Contains((Int32)x.StakeBuyInId)
OR
objWaitingListUser = objWaitingListUser.Where(x =>
x.StakeBuyInId.HasValue &&
StakeBuyInIds.Contains((Int32)x.StakeBuyInId));
答案 1 :(得分:1)
你也可以创建一个扩展名
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);