LINQ क्वेरी परिणाम सेट से डेटासेट या डेटाटेबल भरना

आप एक LINQ क्वेरी को एएसएमएक्स वेब सेवा के रूप में कैसे बेनकाब करते हैं? आमतौर पर, व्यवसाय स्तर से, मैं एक टाइप किया गया डेटासेट या DataTable वापस कर सकता हूं जिसे ASMX पर परिवहन के लिए क्रमबद्ध किया जा सकता है।

LINQ क्वेरी के लिए मैं वही कैसे कर सकता हूं? क्या LINQ क्वेरी के माध्यम से टाइप किए गए DataSet या DataTable को पॉप्युलेट करने का कोई तरीका है?

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 क्वेरी serializeable है ताकि मैं इसे एएसएमएक्स वेब सेवा के रूप में उजागर कर सकूं?

0
जोड़ा संपादित
विचारों: 17

5 उत्तर

यदि आप IEnumerable के रिटर्न प्रकार का उपयोग करते हैं, तो आप सीधे अपना क्वेरी चर वापस कर सकते हैं।

0
जोड़ा

जैसा कि प्रश्न में उल्लिखित है, IENumerable में CopyToDataTable विधि है:

IEnumerable query =
    from order in orders.AsEnumerable()
    where order.Field("OrderDate") > new DateTime(2001, 8, 1)
    select order;

// Create a table from the query.
DataTable boundTable = query.CopyToDataTable();

यह आपके लिए क्यों काम नहीं करेगा?

0
जोड़ा
सभी को यह सोचने के लिए कि क्यों CopyToDataTable() उनकी मशीन पर काम नहीं करता है: यह फ़ंक्शन .NET 3.5 SP1 का हिस्सा नहीं है और न ही यह .NET 4.0 का होगा; इसे IENumerable तक सीमित कर दिया गया है और यह IENumerable - bit.ly/dL0G5
जोड़ा लेखक motto, स्रोत

क्लास ऑब्जेक्ट बनाएं और क्वेरी के list (T) को वापस करें।

0
जोड़ा

डेटा ट्रांसफर ऑब्जेक्ट्स का एक सेट बनाएं, कुछ मैपर, और .asmx के माध्यम से वापस लौटें।
आपको डेटाबेस ऑब्जेक्ट्स को सीधे प्रकट करने के लिए कभी नहीं करना चाहिए, क्योंकि प्रक्रिया स्कीमा में परिवर्तन वेब सेवा उपभोक्ता को बिना किसी ध्यान के प्रचारित करेगा।

0
जोड़ा

यदि आप IEnumerable के रिटर्न प्रकार का उपयोग करते हैं। यह आपके क्वेरी वैरिएबल को सीधे वापस करने में मदद करता है।

MyDataContext db = new MyDataContext();
IEnumerable query = 
    (from order in db.Orders.AsEnumerable()
        select new
        {
            order.Property,
            order.Property2
        })
    as IEnumerable;
return query.CopyToDataTable();
0
जोड़ा