【发布时间】:2021-03-08 16:06:40
【问题描述】:
我有这张桌子:
我想做一个 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 的所有字段执行此操作。
这种查询是否可以通过某种方式实现,还是我需要进行多个查询?
【问题讨论】:
-
您需要使用反射来枚举类(模型)属性,或者创建一个将字符串属性名称与类中的属性匹配的接口。
-
d.Value是单行值,而不是组。您要么需要在AdminFilterID上进行分组,要么将where放在select之前以仅拉取行,可能在整个查询中使用.DefaultIfEmpty(),以便在没有AdminFilterFieldID值3存在时。这似乎是一个糟糕的数据库设计,不适合关系数据库(除非有令人信服的理由使用它 - 例如,可能有多个重复的AdminFilterFieldIDs。) -
@NetMage 有多个过滤器字段prntscr.com/vq1vl3,现在因为我正在构建要执行的查询,所以我需要检查该搜索字段的值是否存在或其为空。感谢您的 cmets
-
但除非过滤器字段是动态的,否则您可以只使用每个过滤器字段一列的常规 SQL 表。您是否即时创建过滤器字段?
标签: c# entity-framework linq linq-to-sql linq-to-entities