我的案例描述: 在我的 C# 和 LINQ to SQL 应用程序中,我正在实现 FeserWard.Controls Intellibox。对于手机的销售,用户在智能框中输入手机的IMEI,框会在Table Handphone中搜索,查找用户输入的IMEI,最后显示完全匹配的IMEI记录。
问题:我想过滤掉所有 status=Available (Item.I_Status="Available") 的 (Handphone.IMEI),然后从那里,当用户输入 IMEI 时,智能框列表将仅从可用 IMEI 中进行搜索。
SQL
select h.HP_ID, h.IMEI, h.Colour, i.I_Status
from Item i, Handphone h
where i.I_ID = h.HP_ID AND i.I_Status='Available'
我想用这个替换 IEnumerable DoSearch 的 LINQ 但卡住了。
var availableIMEISearch = from i in dataContext.Items.ToList()
join h in dataContext.Handphones.ToList()
on i.I_ID equals h.HP_ID
where(h.IMEI.StartsWith(searchTerm, StringComparison.OrdinalIgnoreCase)) && (i.I_Status=="Available")
select new { i, h };
return availableIMEISearch;
当前可行的方法:IEnumerable DoSearch
DataClasses1DataContext dataContext = new DataClasses1DataContext();
public IEnumerable DoSearch(string searchTerm, int maxResults, object extraInfo)
{
var imeiSearch = dataContext.Handphones.ToList()
.Where(h => h.IMEI.StartsWith(searchTerm, StringComparison.OrdinalIgnoreCase));
return imeiSearch;
}
表格1:
Item (PK = I_ID)
表2:
Handphone (PK,FK1 = HP_ID), where Item.I_ID = Handphone.HP_ID