【发布时间】:2021-06-01 18:21:38
【问题描述】:
我有以下代码,
public List<MemberDto> GetMembers(out int rowCount,int pageIndex,int pageSize, string seachBy = "", string searchTerm = "", string sortBy = "", string sortDiection = "")
{
var members = (from m in context.Members
where (string.IsNullOrEmpty(searchTerm) || m.MemberNumber.Equals(searchTerm))
|| (string.IsNullOrEmpty(searchTerm) || m.LastName.Equals(searchTerm))
select m).AsEnumerable();
if (!string.IsNullOrEmpty(sortBy))
{
PropertyDescriptor prop = TypeDescriptor.GetProperties(typeof(EFModel.ClientData.Member)).Find(sortBy, true);
members = (sortDiection.ToLower() == "descnding") ? members.OrderByDescending(x => prop.GetValue(x)).ToList() : members.OrderBy(x => prop.GetValue(x)).ToList();
}
rowCount = (!string.IsNullOrEmpty(searchTerm)) ? members.Count() : rowCount = context.Members.Count() ;
members = members.Skip(pageIndex).Take(pageSize).ToList();
List<MemberDto> memberDtos = new List<MemberDto>();
mapper.Map(members, memberDtos);
return memberDtos;
}
-
在上述方法中,字符串
seachColumn的值可以是memberno或lastname或有时为空。当seachColumn的值为memberno。我只需要在MemberNumber列中搜索searchTerm值。 -
当
seachColumn的值为lastname。我只需要在LastName列中搜索searchTerm值。 -
有时
searchTerm可以为空。当它发生时,我需要所有记录而不考虑任何搜索词。
以上查询正在运行。问题是当有searchTerm 的值时,无论列如何,都会给出该结果。我该怎么做。
【问题讨论】:
-
您可以在
IQueryable上附加.Where子句,它们是隐含的逻辑AND语句(编辑:用于在实体框架中查询数据库的实现)。所以你会有你的“常规”查询,如果你的 searchTerm 不为空,然后说query = query.Where(x => ...)。 -
@BurnsBA 先生,你能给我一个完整的答案吗
-
@BurnsBA 我更新了我方法的另一部分,以便让其他人有一个清晰的想法
-
@Rooter,这段代码正确吗?
searchColumn定义在哪里?
标签: c# entity-framework linq