문제

편집 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();
    }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top