РЕДАКТИРОВАТЬ 1
Я прошу прощения, но после прочтения 2 предложенных статей я все еще не понимаю, что мне следует использовать. Я понимаю, что использование IQueryable не является предпочтительным по разным причинам, но устраняет ли это также IEnumerable? Является ли DataTable действительно моим лучшим вариантом?
Короче, я думаю, какой тип возврата предпочтителен?
У меня есть следующий простой запрос LINQ, который я хочу абстрагировать в DAL. Какой тип var и, следовательно, каким должен быть мой метод?
ConnectDBDataContext context = new ConnectDBDataContext();
var lName = textEdit1.Text;
var searchByPersonLName = from c in context.tblPersons
where c.LastName == lName
orderby c.LastName
select new { c.FirstName,c.LastName,c.PersonID};
dataGridView1.DataSource = searchByPersonLName;
Когда я нахожу его в VS, он говорит IQueryable<T>
, но когда я ставлю точку останова и запускаю ее, кажется , чтобы называть себя IEnumerable. Что правильно и как мне объявить мой метод?
Вот так ->
public static DataTable SearchPerson(string SearhParam)
{
ConnectDBDataContext context = new ConnectDBDataContext();
var persons = (from person in context.tblPersons
orderby person.LastName
select new { person.PersonID, person.LastName, person.FirstName, person.SSN });
var filteredPersonsList = persons.Where(p => p.LastName == SearhParam).ToList();
if (filteredPersonsList.Count == 0)
filteredPersonsList = persons.Where(p => p.LastName.StartsWith(SearhParam)).ToList();
var dataTable = filteredPersonsList.CopyLinqToDataTable();
return dataTable;
}
Если я использую IQueryable<T>
, что такое <T>
или как я узнаю это и что я верну?
Спасибо!
Для справки: CopyToDataTable () ниже.
public static DataTable CopyLinqToDataTable<T>(this IEnumerable<T> source)
{
return new ObjectShredder<T>().Shred(source, null, null);
}
public static DataTable CopyLinqToDataTable<T>(this IEnumerable<T> source,
DataTable table, LoadOption? options)
{
return new ObjectShredder<T>().Shred(source, table, options);
}