我有一个对象产品:
的列表public Class Product
{
public int ID { get; set; }
public string Title { get; set; }
public string Status { get; set; }
}
我有一份上述产品清单:
List<Product> p ;
我正在尝试根据搜索条件ID, Title, Status.
Example :
Id Title Status
1 ABC OPEN
2 CDE CLOSED
3 FGH RESOLVED
4 IJK PROPOSED
5 LMN SET
6 OPQ CLOSED
7 MNO OPEN
8 STU CLOSED.
如果输入了搜索字段 ID 1 :它应该返回
1 ABC OPEN
如果输入搜索字段状态OPEN :应返回
1 ABC OPEN
7 MNO OPEN
如果输入搜索字段标题“MNO”和状态“打开”,则应返回: 7 MNO OPEN
如果 Id =“”且 Title =“”且 Status =“ALL”,则应返回所有元素。
我将把这个对象列表绑定到一个asp.net网格视图。
到目前为止,我的代码如下:
var results = new List<Product>();
foreach (var prod in Product)
{
if (prod.ID == txtProd)
{
results.Add(prod);
}
if (prod.Title.ToUpper() == txtTitle)
{
results.Add(prod);
}
if (prod.Status.ToUpper() == strStatus)
{
results.Add(prod);
}
}
您能否告诉我如何修改此代码以实现我的结果?
答案 0 :(得分:2)
基本上你想在你的条件之间使用AND
,你当前正在做的是OR,并且当它满足多个条件时你会两次添加相同的项目。
您可以根据参数构建动态linq查询:
var query = Product.AsQueryable();
query = txtProd != string.Empty ? query.Where(x => x.ID == txtProd) : query;
query = txtTitle != string.Empty ? query.Where(x => x.Title == txtTitle) : query;
query = strStatus != string.Empty ? query.Where(x => x.Status == strStatus) : query;
var results = query.ToList();
答案 1 :(得分:0)
试试这个:
results = p.Where(((product.ID < yourIDLowerBound) || (product.ID == yourID))
&& (string.IsNullOrEmpty(product.yourTitle) || product.Title == yourTitle)
&& (string.IsNullOrEmpty(product.yourStatus) || product.Status == yourStatus)).ToList();
答案 2 :(得分:0)
作为单个Linq查询,它看起来像这样:
var results = p.Where(x =>
(string.IsNullOrEmpty(txtProd) || x.ID == Convert.ToInt32(txtProd))
&& (string.IsNullOrEmpty(txtTitle) || x.Title == txtTitle)
&& (string.IsNullOrEmpty(strStatus) || x.Status == strStatus)).ToList();
顺便说一下,在列表results
属于Task
类型的问题中,您尝试添加Products
,这是不可能的。
答案 3 :(得分:0)
var results = new List < Product > ();
if (strStatus == "ALL" || txtProd == "" || txtTitle == "")
results = p;
else
foreach(var prod in p) {
if (prod.ID == Int32.Parse(txtProd)) {
results.Add(prod);
}
if (prod.Title.ToUpper() == txtTitle) {
results.Add(prod);
}
if (prod.Status.ToUpper() == strStatus) {
results.Add(prod);
}
}
results = results.Distinct()
.ToList();
答案 4 :(得分:0)
如何创建产品查询方法。我认为这符合所有要求,我不认为任何其他要求涵盖了所有要求。要求。
public List<Product> ProductQuery(List<Product> Products
, int? IDCriteria
, string TitleCriteria
, string StatusCriteria)
{
var query = Products.AsQueryable();
if (IDCriteria != null)
{
query.Where(x => x.ID == IDCriteria);
}
if (!String.IsNullOrEmpty(TitleCriteria))
{
query.Where(x => x.Title == TitleCriteria);
}
if (!String.IsNullOrEmpty(StatusCriteria))
{
if (StatusCriteria.Equals("all", StringComparison.CurrentCultureIgnoreCase))
{
query.Where(x => x.Status.Length > 0 || String.IsNullOrEmpty(x.Status)); //will return any status
}
else
{
query.Where(x => x.Status == StatusCriteria);
}
}
return query.ToList();
}