c# - 如何在列表中搜索
问题描述
我有一个List<string>
在我的视图中有一些看起来像这样的项目:
1S61A9MAT1DKV5N74925,
1S61A9MAT1DKV5X49329,
1S61A9MAT1DKV5X49857
我想在这个项目之后搜索,但老实说我不知道我应该告诉我的控制器什么,当它来的时候List<string>
我在我的控制器中尝试了类似的东西s.SerialNoInvoiceOrdrelineDeliveryCloses.Contains(searchString)
但它不起作用,我的意思是当我搜索这个项目1S61A9MAT1DKV5N74925
时它可以将值传递给控制器,但它找不到我搜索的那个项目的任何结果。正如你在我的
Contorller 中看到的,我有一些属性是字符串,还有一个是List<string>
“ SerialNoInvoiceOrdrelineDeliveryCloses ”
控制器:
public ActionResult test(string searchString) {
string EmailID = Session["Email"].ToString();
var v = (from cbr in db.Contact_Business_Relation
join c in db.Contact on cbr.Contact_No_ equals c.Company_No_
join sih in db.Sales_Invoice_Line on sa.No_ equals sih.Document_No_
where c.E_Mail == EmailID
select new ClosedOrders
{
OrderNumber = sa.Order_No_,
Fakturanummer = sih.Document_No_,
varnummer = sih.No_,
//List<string>
SerialNoInvoiceOrdrelineDeliveryCloses = db.Item_Ledger_Entry
.Where(s => s.Item_No_ == sih.No_)
.Select(s => s.Serial_No_)
.ToList()
});
if (searchString !=null)
{
v = v.Where(s => s.OrderNumber.Contains(searchString)
|| s.Fakturanummer.Contains(searchString)
|| s.varnummer.Contains(searchString)
|| s.SerialNoInvoiceOrdrelineDeliveryCloses.Contains(searchString)
);
}
return View(v);
}
视图模型:
public class ClosedOrders
{
public string OrderNumber { get; set; }
public string Fakturanummer { get; set; }
public List<string> SerialNoInvoiceOrdrelineDeliveryCloses { get; set; }
public string varnummer { get; set; }
}
看法:
@using (Html.BeginForm("test", "Account", FormMethod.Get))
{
<p>
Find by name: @Html.TextBox("SearchString")
<input type="submit" value="Search" />
</p>
}
//Loop Model
foreach (var item in Model)
{
<tr>
<td>
@item.Fakturanummer
</td>
<td>
@item.OrderNumber
</td>
<td> @item.varnummer</td>
<td>
@String.Join(", ", item.SerialNoInvoiceOrdrelineDeliveryCloses)
</td>
</tr>
}
解决方案
v
问题是您正在发送IQueryable<ClosedOrders>
视图。IQueryable
将 an 传递给视图并让它运行查询是一种不好的做法。首先是因为您将未解决的查询发送到端点,其次您需要将相关引用添加到您的视图代码。我建议您.ToList()
在查询末尾添加并将列表发送到视图:
var v = (from cbr in db.Contact_Business_Relation
join c in db.Contact on cbr.Contact_No_ equals c.Company_No_
join sih in db.Sales_Invoice_Line on sa.No_ equals sih.Document_No_
where c.E_Mail == EmailID
select new ClosedOrders
{
OrderNumber = sa.Order_No_,
Fakturanummer = sih.Document_No_,
varnummer = sih.No_,
//List<string>
SerialNoInvoiceOrdrelineDeliveryCloses = db.Item_Ledger_Entry
.Where(s => s.Item_No_ == sih.No_)
.Select(s => s.Serial_No_)
.ToList()
}).ToList();
和:
v = v.Where(s => s.OrderNumber.Contains(searchString)
|| s.Fakturanummer.Contains(searchString)
|| s.varnummer.Contains(searchString)
|| s.SerialNoInvoiceOrdrelineDeliveryCloses.Contains(searchString)
).ToList();
推荐阅读
- css - 模态打开时防止正文滚动并跳转到顶部
- google-apps-script - 根据该工作表中的单元格命名工作表
- python - 将部分输出和输入合并为 tensorflow 中的新输入
- mongodb - 猫鼬如何在猫鼬中使用父级到父级获取chid数据
- asp.net - 重命名控制器后视图未加载
- javascript - Google 的二维码生成 api 不起作用
- angular - 图像 ALT 显示在源代码中但未显示在浏览器元素检查器中
- couchbase - 查询中未使用 Couchbase 数组索引
- java - 在没有xml配置的地图/列表中使用spring注入大量bean实例
- json - TypeScript 从 API 获取数据