मेरे पास एक ऐसा फ़ंक्शन है जो डेटाबेस से डेटा प्राप्त करने के लिए लिंक का उपयोग करता है और फिर मैं उस फ़ंक्शन को अन्य व्यक्तिगत गुणों का उपयोग करके सभी व्यक्तिगत गुणों का उपयोग करने के लिए कॉल करता हूं। प्रत्येक व्यक्तिगत संपत्ति पर। मैं सोच रहा था कि प्रत्येक व्यक्तिगत संपत्ति पर .Sum() को कॉल करने के बजाए सभी गुणों को एक साथ करने का एक प्रभावी तरीका है या नहीं। मुझे लगता है कि जिस तरह से मैं अभी कर रहा हूं, बहुत धीमा है (हालांकि अनचाहे)।एकाधिक गुणों पर कॉल करने के लिए कुशल तरीका।
public OminitureStats GetAvgOmnitureData(int? fnsId, int dateRange)
{
IQueryable<OminitureStats> query = GetOmnitureDataAsQueryable(fnsId, dateRange);
int pageViews = query.Sum(q => q.PageViews);
int monthlyUniqueVisitors = query.Sum(q => q.MonthlyUniqueVisitors);
int visits = query.Sum(q => q.Visits);
double pagesPerVisit = (double)query.Sum(q => q.PagesPerVisit);
double bounceRate = (double)query.Sum(q => q.BounceRate);
return new OminitureStats(pageViews, monthlyUniqueVisitors, visits, bounceRate, pagesPerVisit);
}
संपादित
private IQueryable<OminitureStats> GetOmnitureDataAsQueryable(int? fnsId, int dateRange)
{
var yesterday = DateTime.Today.AddDays(-1);
var nDays = yesterday.AddDays(-dateRange);
if (fnsId.HasValue)
{
IQueryable<OminitureStats> query = from o in lhDB.omniture_stats
where o.fns_id == fnsId
&& o.date <= yesterday
&& o.date > nDays
select new OminitureStats (
o.page_views.GetValueOrDefault(),
o.monthly_unique.GetValueOrDefault(),
o.visits.GetValueOrDefault(),
(double)o.bounce_rate.GetValueOrDefault()
);
return query;
}
return null;
}
संपादित करें:
public class OminitureStats
{
public OminitureStats(int PageViews, int MonthlyUniqueVisitors, int Visits, double BounceRate)
{
this.PageViews = PageViews;
this.MonthlyUniqueVisitors = MonthlyUniqueVisitors;
this.Visits = Visits;
this.BounceRate = BounceRate;
this.PagesPerVisit = Math.Round((double)(PageViews/Visits), 1);
}
public OminitureStats(int PageViews, int MonthlyUniqueVisitors, int Visits, double BounceRate, double PagesPerVisit)
{
this.PageViews = PageViews;
this.MonthlyUniqueVisitors = MonthlyUniqueVisitors;
this.Visits = Visits;
this.BounceRate = BounceRate;
this.PagesPerVisit = PagesPerVisit;
}
public int PageViews { get; set; }
public int MonthlyUniqueVisitors { get; set; }
public int Visits { get; set; }
public double PagesPerVisit { get; set; }
public double BounceRate { get; set; }
}
धन्यवाद जॉन। लेकिन मुझे 'var sums ...' पर 'NotSupportedException' नहीं मिल रहा है। लेकिन इसका आपके समाधान से कोई लेना-देना नहीं है। क्योंकि मैंने जिस तरह से किया था, उसका परीक्षण किया और यह अभी भी इस अपवाद को फेंक देगा। क्या इसका 'IQueryable' भाग के साथ कुछ लेना देना है? –
SherCoder
और यह भी आपके समाधान के तरीके से अलग कैसे है। मुझे अभी भी प्रत्येक व्यक्तिगत गुणों पर .Sum() को कॉल करना होगा। धन्यवाद – SherCoder
@ शेरकोडर: अपवाद के बारे में, आपको हमें यह बताना होगा कि आप किस प्रकार के 'IQueryable' के साथ काम कर रहे हैं। यह कैसे बेहतर है: सभी रकम एक ही अभिव्यक्ति वृक्ष के हिस्से के रूप में व्यक्त की जाती हैं, इसलिए SQL अनुवाद परत उन्हें केवल एक क्वेरी में खींच सकती है। – Jon