- 当查询时涉及外键可能不存在时使用DefaultIfEmpty()
- 当查询时可能不确定是否存在某个条件时使用WhereIf
/// <summary>
/// WhereIf[在condition为true的情况下应用Where表达式]
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="source"></param>
/// <param name="condition"></param>
/// <param name="expression"></param>
/// <returns></returns>
public static IQueryable<T> WhereIf<T>(this IQueryable<T> source, bool condition, Expression<Func<T, bool>> expression)
{
return condition ? source.Where(expression) : source;
}
- Contains类似于模糊查询
- a>b? “1”:“2"表示当a大于b时返回"1”,否则返回"2"
public dynamic Search(LandParcelFilter filters)
{
if (filters == null)
return null;
var q = from l in db.FW_LandParcel
join e in db.Sys_EnterpriseInfo on l.EntID equals e.EntID into entInfo
from EntInfo in entInfo.DefaultIfEmpty()
join d in db.Sys_DistrictInfo on l.DisID equals d.DisID into disInfo
from DisInfo in disInfo.DefaultIfEmpty()
select new
{
l.LapaID,
l.LapaName,
l.EntID,
l.DisID,
l.RFID,
l.Area,
l.ZoneNumber,
l.GreenhouseID,
l.CreateTime,
l.State,
l.Remark,
DisInfo.DisType,
EntName = (EntInfo == null) ? "" : EntInfo.EntName,
DisName = (DisInfo == null) ? "" : DisInfo.DisName
};
q =q.WhereIf(filters.EntID > 0, t => t.EntID == filters.EntID)//
.WhereIf(filters.DisType > 0, t => t.DisType == filters.DisType)
.WhereIf(filters.DisID > 0, t => t.DisID == filters.DisID)
.WhereIf(filters.State != 0, t => t.State == filters.State)
.WhereIf(!filters.keywords.IsBlank(), t => t.LapaName.Contains(filters.keywords));
return q.OrderByCustom(filters.sidx, filters.sord).Paging(filters.page, filters.rows);
}