ملء البيانات أو DataTable من LINQ نتيجة الاستعلام مجموعة

StackOverflow https://stackoverflow.com/questions/16

سؤال

كيف يمكنك كشف استعلام 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>();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top