একটি LINQ ক্যোয়ারী ফলাফল সেট থেকে একটি DataSet বা DataTable ভর্তি

কিভাবে আপনি একটি ASMX ওয়েব পরিষেবা হিসাবে একটি 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 কোয়েরি সিরিয়ালাইজযোগ্য তাই আমি এটি একটি ASMX ওয়েব পরিষেবা হিসাবে প্রকাশ করতে পারি?

0
যোগ সম্পাদিত
মতামত: 11

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
যোগ
প্রত্যেকেরই ভাবছে যে কপিরাইট ডেটাটেবল() তাদের মেশিনে কাজ করে না: এই ফাংশনটি .NET 3.5 SP1- এর অংশ নয় এবং এটি হবে না .নেট 4.0; এটি IEnumerable তে সীমাবদ্ধ করা হয়েছে এবং IEnumerable - bit.ly/dL0G5
যোগ লেখক motto, উৎস

একটি ক্লাস অবজেক্ট তৈরি করুন এবং ক্যোয়ারীর তালিকা (টি) ফেরত দিন।

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
যোগ