내 dal이 데이터를 반환해야합니까? 아니면…
-
08-07-2019 - |
문제
편집 1
사과하지만 2 개의 제안 된 기사를 읽은 후에도 여전히 내가 무엇을 사용해야하는지 이해하지 못합니다. 나는 iqueryable을 사용하는 것을 여러 가지 이유로 선호하지 않지만 ienumerable도 제거 할 수 있다는 것을 이해합니까? DataTable이 정말로 최선의 선택입니까?
요컨대, 선호하는 반환 유형은 무엇입니까?
DAL으로 추상화하고 싶은 다음 간단한 LINQ 쿼리가 있습니다. 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);
}
해결책
그가 의미하는 바는 데이터를 DAL을 반환하기를 원하는 객체에 매핑하는 것입니다.
첫 번째 질문에 대한 답변에서 "var"는 변수의 경우가 실제로 짧고 유형은 할당에 정의 된 유형입니다.
var myvariable = string.empty;
이 예에서 유형은 문자열의 유형입니다.
var myreader = new StringReader();
이 예에서는 유형이 StringReader의 유형입니다.
"무엇인가"라는 두 번째 질문에 관해서는. t는 일반적인 유형입니다.
DAL이 실제 개체를 반환하는 위치의 예를 들어 :
public Product GetProduct(int ProductID)
{
var product = from p in db.MyTable
where p.productID == ProductID
select new product { name = p.name, pricepoint = p.pricepoint, qty = p.quantity };
return product;
}
다른 팁
우선, iqueryable은 ienumerable을 구현하기 때문에 잠재적으로 둘 다를 보게 될 것입니다. 보다 자세한 내용은 여기에 있습니다
일반적으로, 나는 당신의 dal을 가능할 때마다 실제로 객체를 반환하는 것이 좋습니다.
나는 할 것이다 이 블로그를 읽으십시오 방법과 제안하는 일을하지 않는 방법에 대한 지침. 짧은 대답, iqueryable을 반환하지 마십시오.
편집 : 예 :
internal static File[] GetAllFilesByUserID(int userID)
{
var db = GetDataContext();
return (from files in db.Files where files.OwnerUserID == userID select files).ToArray();
}