我有一个内部应用程序的搜索页面的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