gpt4 book ai didi

c# - 具有许多可选参数的过滤器不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 19:44:20 24 4
gpt4 key购买 nike

这是我的代码。只有当第一个 if 语句 (phoneNumber) 不为 null 时,查询才能正常工作,但如果第一个 if 语句为 null 而其他参数不为 null,它将给我整个表

public static List<AllMember> SearchMember(string phoneNumber, string fName, string lName, string Tz, string empNum, string email, string dbName)
{
try
{
using (var db = new DCardsDataContext(Organizations.GetConnectionStringByDbName(dbName)))
{
return db.AllMembers.Where(
m =>
string.IsNullOrEmpty(phoneNumber) ? true : phoneNumber == m.PhoneNumber &&
string.IsNullOrEmpty(fName) ? true : fName == m.MemberFirstName &&
string.IsNullOrEmpty(lName) ? true : lName == m.MemberLastName &&
string.IsNullOrEmpty(Tz) ? true : Tz == m.TZ &&
string.IsNullOrEmpty(empNum) ? true : empNum == m.EmployeeNum &&
string.IsNullOrEmpty(email) ? true : email == m.Email
).ToList();
}
}
catch (Exception ex)
{
Logger.Info($"error in SearchMember");
Logger.Error(ex.Message);
}
return null;
}

最佳答案

首先,这几乎可以肯定是错误或括号和优先规则 - 添加更多括号应该可以使其工作“正常”:

(string.IsNullOrEmpty(phoneNumber) ? true : phoneNumber == m.PhoneNumber)
&& (string.IsNullOrEmpty(fName) ? true : fName == m.MemberFirstName)
&& (string.IsNullOrEmpty(lName) ? true : lName == m.MemberLastName)
...

但其次,这非常低效 - 它往往会生成非常昂贵的 SQL。更好的方法是根据您的特定查询实际需要的内容来编写查询:

IQueryable<Whatever> query = db.AllMembers;

if(!string.IsNullOrEmpty(phoneNumber))
query = query.Where(m => m.PhoneNumber == phoneNumber);
if(!string.IsNullOrEmpty(fName))
query = query.Where(m => m.MemberFirstName == fName);
if(!string.IsNullOrEmpty(lName))
query = query.Where(m => m.MemberLastName == lName);
// ...

var results = query.Take(maxCount).ToList();

关于c# - 具有许多可选参数的过滤器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48250066/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com