我有一個內部應用程序的搜索頁面的LINQ方法。該方法看起來如下不同參數的LINQ方法
public static DataTable SearchForPerson(String FirstName, String MiddleName, String LastName, String SSN, DateTime? BirthDate)
{
var persons = (from person in context.tblPersons
where person.LastName == LastName || person.LastName.StartsWith(LastName)
join addresse in context.tblAddresses on person.PersonID equals addresse.PersonID
orderby person.LastName
select new { person.PersonID, person.LastName, person.FirstName, person.SSN, addresse.AddressLine1 });
var filteredPersonsList = persons.Where(p => p.LastName == LastName).ToList();
if (filteredPersonsList.Count == 0)
filteredPersonsList = persons.Where(p => p.LastName.StartsWith(LastName)).ToList();
var dataTable = filteredPersonsList.CopyLinqToDataTable();
return dataTable;
}
現在,你可以毫無疑問的看到,我通過LastName
創建此,因爲它只搜索時做了一個輕微的監督。當我對這件事情發生時,我正在擴大這個範圍,以致我可能無法正確處理這個問題。
所以,最後到我的問題;它是更理想(讀最好的做法,更有效,等等...)有這樣一個方法的機構(我正在考慮對非空PARAM交換機)來告訴搜索哪些參數與或應該我只是做出多個版本,一個la SearchForPersonByLastName
& SearchForPersonBySSN
?
此外,是否還有一個更加靈活的解決方案,我會認爲是常見的問題?
沒有,這是最正確的。我唯一關心的是邊緣情況下,他們想通過多個參數搜索,有更多的方法,'SearchByFirstAndLastName()'? – 2010-01-07 16:57:39
請參閱我的編輯。 – jason 2010-01-07 18:37:37