目的:
在表'预订'中,一行代表预订的资源。 行可以共享“预订ID”。因此,如果您预订了一些食物和一个房间,那将是两行共享相同的预订ID。
现在使用lambda表达式。如果这些行中的一个具有特殊的布尔值,则允许将其称为externBoolean(如果这是真的)。我想获取该行以及具有相同预留ID的其他行。 然后返回一个列表,其中包含在此布尔值和所有兄弟行中具有true的所有行。
基本上是这样的:
select t2.*
from Reservations t1
join Reservations t2
on t1.ReservationId = t2.ReservationId
where t1.externBoolean = 1
但使用lambda表达式
var model1 = db.Pronestor_Internservice.Where(x => DbFunctions.TruncateTime
(x.booking_start_time) >= startDate && DbFunctions.TruncateTime
(x.booking_end_time) <= endDate && x.reservation_name.Contains(search_text)
&& x.resource_category_id == 61)
.Join(db.Pronestor_Internservice, x => x.reservation_id, x =>
x.reservation_id, (x, y) => y).ToList
答案 0 :(得分:1)
您可以使用Queryable.Join
var query = t1.Join(t2, x => x.ReservationId, x => x.ReservationId, (x, y) => new {First = x, Second = y})
.Where(x => x.First.externBoolean == 1)
.Select(x => x.Second);
或者
var query = t1.Where(x => x.externBoolean == 1)
.Join(t2, x => x.ReservationId, x => x.ReservationId, (x, y) => y);
答案 1 :(得分:0)
上课:
public class Reservation
{
public int ReservationId { get; set; }
public bool ExternBoolean { get; set; }
}
您可以使用此代码:
List<Reservation> result = reservations
.Where(r => r.ExternBoolean)
.Join(reservations, r1 => r1.ReservationId, r2 => r2.ReservationId, (r1, r2) => new { r1, r2 })
.Select(pair => pair.r2)
.ToList();
r,r1和r2是lambda expressions的一部分。
您可以在通话时阅读此查询。来自源集合reservations
过滤器值where ExternBoolean
属性为true(对于集合中的每个r
检查r.ExternBoolean
)和join每个过滤后的对象通过匹配属性的相等性来匹配相同集合reservations
(第一个参数)的所有元素。
对于第一个集合(已过滤)的每个元素r1
获取ReservationId属性(第二个参数),对于第二个集合r2
的每个元素reservations
,也获取ReservationId属性(第三个参数)。
然后,对于匹配属性的两个集合中的对,选择具有2个字段r1
和r2
的新匿名类。
接下来从每个元素pair
的每个对集合中选择第二个属性r2
(因为r2包含与自身连接的元素r1)。
最后通过ToList()
迭代执行查询。