यदि आप अपनी अभिव्यक्तियां बना रहे हैं और उन्हें संकलित कर रहे हैं, या AsQueryable का उपयोग कर रहे हैं, तो हाँ; LINQ- जेनरेट की गई विधियां डीबग करने के लिए शाही दर्द होगी।
आप वास्तविक तरीकों के छोटे fragements का उपयोग करके कुछ दर्द को बचा सकता है - कम से कम उपयोगी स्टैक ट्रेस में दिखाई देंगे कुछ ...
एक अन्य विचार है: बल्कि एक विशाल अभिव्यक्ति की तुलना में, यदि आप कर सकते हैं डेज़ी-चेन चीजें थोड़ा और अधिक हो सकती हैं (स्टैक ट्रेस से) जहां यह असफल हो रही है। नकारात्मक प्रदर्शन प्रदर्शन है - एक कहां (foo)। जहां (बार) दो प्रतिनिधि आवेदक हैं, जहां-जहां (foo & & बार) एक हो सकता है।
एक विकल्प विस्तार विधियों के डीबग संस्करण में स्वैप करना हो सकता है; दुर्भाग्य से यह एक छोटे असुविधाजनक है, क्योंकि IQueryable<T>
और Queryable
एक ही नाम स्थान में रहे हैं ... यह, काम करता है हालांकि ...
आउटपुट पहले:
>Where: x => ((x % 2) = 0)
<Where: x => ((x % 2) = 0)
>Count
'WindowsFormsApplication2.vshost.exe' (Managed): Loaded 'Anonymously Hosted DynamicMethods Assembly'
<Count
कोड:
using System;
using System.Diagnostics;
using System.Linq.Expressions;
namespace Demo
{
using DebugLinq;
static class Program
{
static void Main()
{
var data = System.Linq.Queryable.AsQueryable(new[] { 1, 2, 3, 4, 5 });
data.Where(x => x % 2 == 0).Count();
}
}
}
namespace DebugLinq
{
public static class DebugQueryable
{
public static int Count<T>(this System.Linq.IQueryable<T> source)
{
return Wrap(() => System.Linq.Queryable.Count(source), "Count");
}
public static System.Linq.IQueryable<T> Where<T>(this System.Linq.IQueryable<T> source, Expression<Func<T, bool>> predicate)
{
return Wrap(() => System.Linq.Queryable.Where(source, predicate), "Where: " + predicate);
}
static TResult Wrap<TResult>(Func<TResult> func, string caption)
{
Debug.WriteLine(">" + caption);
try
{
TResult result = func();
Debug.WriteLine("<" + caption);
return result;
}
catch
{
Debug.WriteLine("!" + caption);
throw;
}
}
}
}
स्रोत
2008-10-29 08:38:05
लिंक द्वारा आगे बढ़ाया गया ऑब्जेक्ट्स को आमतौर पर System.Linq.Enumerable के तरीकों को संदर्भित करता है। इनमें गतिशील विधियां शामिल नहीं हैं (लेकिन अज्ञात विधियों को शामिल कर सकते हैं)। क्या आप वास्तव में गतिशील तरीकों का उपयोग कर रहे हैं? –
@ डेविड - मैंने उससे पूछा; Orlangur एकाधिक स्रोतों के साथ एक ही कोड का उपयोग करने के लिए AsQueryable का उपयोग कर रहा है - तो गतिशील तरीकों की उम्मीद है। –