ملء البيانات أو DataTable من LINQ نتيجة الاستعلام مجموعة
-
08-06-2019 - |
سؤال
كيف يمكنك كشف استعلام 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.مجموعات.Generic.IEnumerable' أن 'النظام.مجموعات.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>();