LINQ 쿼리 결과 집합에서 DataSet 또는 DataTable 채우기
LINQ 쿼리를 ASMX 웹 서비스로 어떻게 노출합니까? 일반적으로 비즈니스 계층에서 유형을 반환 DataSet
하거나 DataTable
ASMX를 통한 전송을 위해 직렬화 할 수 있습니다.
LINQ 쿼리에 대해 동일한 작업을 수행하려면 어떻게해야합니까? 타이핑 DataSet
하거나 DataTable
LINQ 쿼리를 통해 채우는 방법이 있습니까?
public static MyDataTable CallMySproc()
{
string conn = "...";
MyDatabaseDataContext db = new MyDatabaseDataContext(conn);
MyDataTable dt = new MyDataTable();
// execute a sproc via LINQ
var query = from dr
in db.MySproc().AsEnumerable
select dr;
// copy LINQ query resultset into a DataTable -this does not work !
dt = query.CopyToDataTable();
return dt;
}
LINQ 쿼리의 결과 집합을 DataSet
또는 로 가져 오려면 어떻게 DataTable
해야합니까? 또는 LINQ 쿼리를 직렬화하여 ASMX 웹 서비스로 노출시킬 수 있습니까?
질문에서 언급 한 바와 같이, IEnumerable
이 CopyToDataTable
방법을 :
IEnumerable<DataRow> query =
from order in orders.AsEnumerable()
where order.Field<DateTime>("OrderDate") > new DateTime(2001, 8, 1)
select order;
// Create a table from the query.
DataTable boundTable = query.CopyToDataTable<DataRow>();
왜 그렇게되지 않습니까?
DataContext
클래스 에 대해이 쿼리를 수행하려면 다음을 수행 해야합니다.
MyDataContext db = new MyDataContext();
IEnumerable<DataRow> query =
(from order in db.Orders.AsEnumerable()
select new
{
order.Property,
order.Property2
})
as IEnumerable<DataRow>;
return query.CopyToDataTable<DataRow>();
없으면 as IEnumerable<DataRow>;
다음과 같은 컴파일 오류가 나타납니다.
'System.Collections.Generic.IEnumerable'유형을 'System.Collections.Generic.IEnumerable'로 암시 적으로 변환 할 수 없습니다. 명시적인 전환이 존재합니다 (캐스트가 누락 되었습니까?)
두 개의 매퍼 인 데이터 전송 오브젝트 세트를 작성하고 .asmx를 통해이를 리턴하십시오. 프로 시저 스키마의 변경 사항은 웹 서비스 이용자에게 알리지 않고 전파되므로 데이터베이스 오브젝트를 직접 노출
해서는 안됩니다 .
의 반환 유형을 사용하면 쿼리 변수를 직접 IEnumerable
반환 할 수 있습니다.
클래스 객체를 생성 list(T)
하고 쿼리를 반환 합니다.
반환 유형을 사용하는 경우 IEnumerable
쿼리 변수를 직접 반환하는 데 도움이됩니다.
MyDataContext db = new MyDataContext();
IEnumerable<DataRow> query =
(from order in db.Orders.AsEnumerable()
select new
{
order.Property,
order.Property2
})
as IEnumerable<DataRow>;
return query.CopyToDataTable<DataRow>();
For the sake of completeness, these solutions do not work for EF Core (at least not for EF Core 2.2). Casting to IEnumerable<DataRow>
, as suggested in the other answers here, fails. Implementing this class and extension methods worked for me https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/implement-copytodatatable-where-type-not-a-datarow.
Why it's not built into EF Core, I have not idea.
참고URL : https://stackoverflow.com/questions/16/filling-a-dataset-or-datatable-from-a-linq-query-result-set
'IT' 카테고리의 다른 글
C ++에 비해 D는 얼마나 빠릅니까? (0) | 2020.07.04 |
---|---|
모범 사례 : HTML id 또는 이름 속성으로 양식 요소에 액세스 하시겠습니까? (0) | 2020.07.04 |
Appstore connect 오류 : Info.plist 파일에 목적 문자열이 없습니다. (0) | 2020.07.04 |
HMVC 패턴은 무엇입니까? (0) | 2020.07.04 |
요소가 페이지에 추가 될 때 알림을 받으려면 어떻게해야합니까? (0) | 2020.07.04 |