首页 > 解决方案 > C# linq 查询,每个属性的 where 子查询

问题描述

我有这张桌子:

在此处输入图像描述

我想做一个 linq 查询,我将根据 adminfilterfieldid 获取每个属性值。

到目前为止我有这个:

newDto = from d in DbContext.AdminFilterItems
         where d.AdminFilterID == filterId
         select new ReservationDto
         {
             BookingDate = d.Value
         };

现在由于 BookingDate 是 AdminFilterFieldId 是 2,我希望我可以做类似BookingDate = d.Value.Where(s => s.AdminFilterFieldID = 3)或 null 的事情,以防该 adminfilterfieldid 没有值。我想为该 adminfilterid 的所有字段执行此操作。

这种查询是否可以通过某种方式实现,还是我需要进行多个查询?

标签: c#entity-frameworklinqlinq-to-sqllinq-to-entities

解决方案


它看起来很简单,只是你的 where 中的另一个子句。

from d in DbContext.AdminFilterItems
         where d.AdminFilterID == filterId
         && d.AdminFilterFieldID = 3
         select new ReservationDto
         {
             BookingDate = d.Value
         };

如果您需要对多个值进行过滤,只需保留初始查询并在其上运行其他过滤器,然后进行投影(选择)。

var qry =  from d in DbContext.AdminFilterItems
             where d.AdminFilterID == filterId
// Filter 1
qry.Where(d => d.AdminFilterFieldID = 3).Select(d => new ReservationDto
             {
                 BookingDate = d.Value
             });

// Filter 2
qry.Where(d => d.AdminFilterFieldID = 2).Select(d => new ReservationDto
             {
                 BookingDate = d.Value
             });

推荐阅读