私のケースの説明: 私の C# および LINQ to SQL アプリケーションでは、FeserWard.Controls Intellibox を実装しています。携帯電話の販売の場合、ユーザーは携帯電話の IMEI を intellibox に入力し、ボックスは Table Handphone で検索を行ってユーザー入力 IMEI を探し、最後に正確に一致する IMEI レコードを表示します。
問題:すべての (Handphone.IMEI) を status=Available (Item.I_Status="Available") で除外したいのですが、そこからユーザーが 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