LINQ 检查 ICollection 是否<int>与 c# 数组有任何交叉



所以我有一个包含整数的c#数组。

在我的数据库中,我有一个名为request的实体。请求与名为Weeks的表具有一对多关系。在周中有一个requestID和一周(因此第1周的值为1,第2周->第2周等)

我需要构造一个where子句,如果数据库记录与我的c#数组有任何重叠,它就会得到该记录。

例如,假设一个请求在数据库中有1,2,3周连接到它,而我的c#数组有[3,5,6],我希望该请求被拉取。

有什么想法可以做到这一点吗?

这是我目前为止的LINQ代码

IQueryable<request> proposedRequest = db.requests.Include(r => r.rooms);
proposedRequest = proposedRequest.Where(r=>r.booked.Equals(1));
proposedRequest = proposedRequest.Where(r => r.roundID.Equals(roundID));
proposedRequest = proposedRequest.Where(r=>r.day.Equals(day));
proposedRequest = proposedRequest.Where(s=>s.start<time+length && s.start + s.length > time);
//I attempted something here but obviously it doesnt work
proposedRequest = proposedRequest.Where(r=>weeks.Contains(r.weeks_request.Any(f=>f.week)));

所以在我的请求表中有一个属性weeks。这是1或0。如果是1,这意味着请求是针对一组标准的周,即1-12。这意味着weeks_request表中没有此请求的条目。

如果周属性为0,这意味着它是1-16周的任何排列,而不是标准的1-12周。因此,在weeks_request表中为所选的每一周都有一个单独的条目。

数组周包含用户想要预订的周。但很明显,如果已经预订了,他们就无法预订一周。因此,我需要找到它是否已经预订。

有什么想法吗?

尝试更改:

r=>weeks.Contains(r.weeks_request.Any(f=>f.week))

收件人:

r=>r.weeks_request.Any(f=>weeks.Contains(f.week))

根据更新的问题进行更新

我不完全确定我是否了解您的情况,但请尝试以下查询:

IQueryable<request> proposedRequest = 
db.requests.Include(r => r.rooms)
.Where(r => 
r.booked.Equals(1) &&
r.roundID.Equals(roundID) &&
r.day.Equals(day) &&
r.start < time + length && 
r.start + r.length > time &&
((r.week == 0 && weeks.Any(w => w <= 12) 
|| (r.week == 1 && r.weeks_request.Any(w => weeks.Contains(w.week));

最新更新