开发者

converting/Casting ISingleResult - List values to DataTable without Looping

开发者 https://www.devze.com 2023-01-18 21:32 出处:网络
I am using Linq to Sql. When My StoredProcedure Executing its result ll returned in form of IMultipleResults.

I am using Linq to Sql. When My StoredProcedure Executing its result ll returned in form of IMultipleResults.

I am converting it to ISingleResults and It can be Casted as List.

So I need to Convert it to DataTable so That I can Bind it to Dataset and Pa开发者_开发问答ss the values to UI.

But I want such method where I can convert it without LOOP.

Please Any body Help me.

For Any Clarification Contact me.

Thanking you.


First you might want to see if you could cast your list to a BindingList, or do something like this:

BindingListX = New BindingList(Of elementX)(QueryResult.ToList())

You might be able to bind with that. If that doesn't work though here's another question: Do you want to not use a loop in your code at all, or just not see a loop in your code? It is possible to create an extension function that does the conversion:

public static class HelperFunctions
    {
        public static void Map<T>(this IEnumerable<T> source, Action<T> func)
        {
            foreach (T i in source)
                func(i);
        }

        public static DataTable ToDataTable<T>(this IEnumerable<T> source)
        {
            var dt = new DataTable();
            var properties = typeof(T).GetProperties();
            dt.Columns.AddRange(properties.Select(x => new DataColumn(x.Name, x.PropertyType)).ToArray());
            source.Select(x => dt.NewRow().ItemArray = properties.Select(y => y.GetValue(x, null)).ToArray()).Map(x => dt.Rows.Add(x));
            return dt;
        }
    }

But as you can see, the other extension function 'Map' is nothing more than a foreach that can be used inline. If that is not what you want then I apologize and will try to come up with a different way.

It is also worth noting that I'm not sure if assigning to Item Array is the best way to populate a row so if it doesn't work then please let me know so that I may draft another version of the function.

Hope this helps!

0

精彩评论

暂无评论...
验证码 换一张
取 消