linq - include where parameters

本文关键字:parameters where include linq | 更新日期: 2023-09-27 18:05:19

我有一个关于Linq的奇怪问题。

我有这样的查询:

 var results = (from p in hotsheetDB.Properties
                           where p.PCode == pCode
                           && p.PropertyStatusID == propertyStatuses
                           orderby p.PropertyID descending
                           select new
                           {
                               PropertyId = p.PropertyID,
                               PCode = p.PCode,
                               PropertyTypeName = p.cfgPropertyType.Name,
                               FullAddress = p.Address1 + " " + p.Address2,
                               ZipCode = p.ZipCode.Code,
                               CityName = p.cfgCity.Name,
                               LivingSquareFeet = p.LivingSquareFeet,
                               LotSquareFeet = p.LotSquareFeet,
                               NumBedrooms = p.NumBedrooms,
                               NumBathrooms = p.NumBathrooms,
                               PropertyStatusName = p.cfgPropertyStatuse.Name
                           });

注意到pCode和propertystatus参数。它们是来自用户的输入值。他希望通过pCode或/和propertystatus进行搜索。

所以,当用户填写只有pCode他想返回所有的记录与pCode有任何propertyStatuses…好吧,因为propertyStatuses是在查询,但它是null, 查询将不会返回任何(因为没有记录与空(null) propertyStatuses…

因此,问题是:是否有办法包含这些参数,只有当它们有值时?(不使用所有组合进行单独的N个查询?(我有多个输入)

Thanks in advance.

linq - include where parameters

您可以更改where子句,使包含null的部分始终返回true。

例如:

where (pCode == null || p.PCode == pCode)
   && (propertyStatuses == null || p.PropertyStatusID == propertyStatuses)

我只是猜测,但尝试:

where p.PCode == pCode && 
(p.PropertyStatusID == null || p.PropertyStatusID == propertyStatuses)