我有一個Objectset代表一組人,我想將它用作DataGridView控件的DataSource。但在此之前,我想根據搜索字符串篩選一組人。因此,如果搜索字符串是「David John」,我想保留「David Johnson」和「John Davidson」,但不要保留「John Williams」,「David Beckham」或「Al Green」。如何多次過濾對象集?
這是我已經試過:
MyObjectContext context = GetContext();
string searchBox = "John David";
Regex regex = new Regex("[a-zA-Z]+", RegexOptions.Singleline);
MatchCollection matches = regex.Matches(searchBox);
IQueryable<Owner> q = ce.Owner;
foreach (Match match in matches)
{
q = q.Where(o => o.FirstName.Contains(match.Value)
|| o.LastName.Contains(match.Value));
}
findOwnerDataGrid.DataSource = q.OrderBy(o => o.LastName);
但似乎只適用最後一場比賽「大衛」。
我該如何完成我需要做的事情?歡迎任何不同或更簡單的解決方案。如果它很重要,網格是隻讀的,所以我不必擔心綁定/編輯的考慮因素。
[我想你打這裏的問題(http://stackoverflow.com/questions/8898925/is-there-a-reason - 用於-CS-重用的最可變IN-A-的foreach/8899347#8899347)。如果你將'match'賦給'foreach'中的局部變量,並在lambda表達式中引用它,那麼我想你的原始代碼會起作用。 – 2013-03-18 07:41:55
感謝Martin的洞察力。它把奇怪的行爲帶出了神祕的面紗。 – 2013-03-18 12:29:27