gpt4 book ai didi

c# - 减少用于过滤的 linq 查询

转载 作者:行者123 更新时间:2023-11-30 13:46:08 25 4
gpt4 key购买 nike

我有一个 View ,其中包含 3 个文本框,它们绑定(bind)到 ViewModel SupplierNameContactAddress 和一个绑定(bind)到 中的属性我的 ViewModel 中的 code>SearchCommand 属性。

我的要求是根据上述属性过滤 Supplier 记录。我使用了 EntityFramework。

用户可以输入上述任何文本框,这让我编写了 9 个不同的查询。例如,如果用户仅在 SupplierName 文本框中输入数据,那么我需要运行一个以 SupplierName 作为参数的查询。如果用户输入 SupplierNameContact 文本框,那么我需要运行另一个查询。等等。

这是我的代码:

public IEnumerable<Model.Supplier> GetAllSuppliersBySearch(string nameMatch, string contactMatch, string phoneMatch)
{

if(nameMatch!=null)
{
var q = from f in Context.Suppliers
where f.SupplierName==nameMatch
select f;
}
else if(contactMatch!=null)
{
var q = from f in Context.Suppliers
where f.ContactName==contactMatch
select f;
}
else if(phoneMatch!=null)
{
var q = from f in Context.Suppliers
where f.ContactName==contactMatch
select f;
}

return q.AsEnumerable();
}

与其编写多个查询,不如使用一个查询或以任何优化方式完成此任务?

最佳答案

使用 lambda 语法编写查询:

IQueryable<Supplier> query = Context.Suppliers;

if (!String.IsNullOrEmpty(nameMatch))
query = query.Where(s => s.SupplierName == nameMatch);

if (!String.IsNullOrEmpty(contactMatch))
query = query.Where(s => s.ContactName == contactMatch);

// etc

return query.AsEnumerable();

另一种选择是在查询中添加参数检查条件

var query = 
from s in Context.Suppliers
where (String.IsNullOrEmpty(nameMatch) || s.SupplierName == nameMatch) &&
(String.IsNullOrEmpty(contactMatch) || s.ContactName == contactMatch)
// etc
select s;

关于c# - 减少用于过滤的 linq 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23196538/

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