1

非静的メソッドにはターゲット エラーが必要です。Google で検索すると、null 値をチェックする投稿が表示され、データではすべての値が非 null として宣言されており、なぜこのエラーが発生するのかわかりません。助けてください。

マイコード:

Db を呼び出して合計結果を取得しています

    var result = _retailerStatsRepository.GetAllRetailersForManufacturerCountryAndCategorySelectedDates(manufacturerRow.Id,
                                                                                        countryRow.Id,
                                                                                        categoryRow.Id,
                                                                                        cumLeads.StartDate,
                                                                                        cumLeads.EndDate);

ノート:

Linq を使用して、さらにクエリを実行するために結果を使用しようとしています

   retailerWeeklyClickCount = result.Where(
                       i =>
                       i.Date >= localStart && i.Date <= localEnd && i.RetailerId == retailer.Id &&
                       i.ManufacturerId == manufacturerRow.Id
                       && i.CountryId == countryRow.Id && i.CategoryId == categoryRow.Id).Sum(i => i.WidgetClicks);

エラーが発生するので、以下を試します

編集

 var retailerWeeklyClicks = result.Where(
                        i =>
                        i.Date >= localStart && i.Date <= localEnd && i.RetailerId == retailer.Id &&
                        i.ManufacturerId == manufacturerRow.Id
                        && i.CountryId == countryRow.Id && i.CategoryId == categoryRow.Id);

 if(retailerWeeklyClicks!=null)
                    {
                        retailerWeeklyClickCount = retailerWeeklyClicks.Sum(i => i.WidgetClicks);
                    }

しかし、それでも同じエラーが発生し、DB をチェックインしましたが、選択したカテゴリの開始日から終了日までの数日間しかデータがありません。

スタックトレース :

System.Reflection.RuntimeMethodInfo.CheckConsistency (オブジェクト ターゲット) で System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck (オブジェクト obj、BindingFlags invokeAttr、バインダー バインダー、オブジェクト [] パラメーター、CultureInfo カルチャ) で System.Reflection.RuntimeMethodInfo.Invoke (オブジェクト obj、 BindingFlags invokeAttr、Binder バインダー、Object[] パラメータ、CultureInfo カルチャ)
System.Reflection.RuntimePropertyInfo.GetValue (オブジェクト obj、BindingFlags invokeAttr、バインダー バインダー、オブジェクト [] インデックス、CultureInfo カルチャ) で System.Reflection.RuntimePropertyInfo.GetValue (オブジェクト obj、オブジェクト [] インデックス) で System.Data.Objects. ELinq.QueryParameterExpression.TryGetFieldOrPropertyValue(MemberExpression me、Object インスタンス、Object& memberValue) で System.Data.Objects.ELinq.QueryParameterExpression.TryEvaluatePath(式式、ConstantExpression& constantExpression) で System.Data.Objects.ELinq.QueryParameterExpression.EvaluateParameter(Object[]引数) System.Data.Objects.ELinq.ELinqQueryState.GetExecutionPlan(Nullable 1 forMergeOption) at System.Data.Objects.ObjectQuery1.GetResults(Nullable ) で1 forMergeOption) at System.Data.Objects.ObjectQuerySystem.Data.Objects.ELinq.ObjectQueryProvider.ExecuteSingle[ TResult 1 source) at System.Data.Objects.ELinq.ObjectQueryProvider.<GetElementFunction>b__3[TResult](IEnumerable](IEnumerable 1 query, Expression queryRoot) at System.Data.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute[S](Expression expression) at System.Linq.Queryable.Sum[TSource](IQueryable1 ソース、式1 selector) at reporting.e_tale.co.uk.Controllers.ReportsController.CumLeadsParameters(CumLeadsReport cumLeads) in d:\e-tale-core-development\trunk\reporting.e-tale.co.uk\Controllers\ReportsController.cs:line 492 at lambda_method(Closure , ControllerBase , Object[] ) at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary2 つのパラメーター) System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext、ActionDescriptor actionDescriptor、IDictionary 2 parameters) at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12() at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func1 継続)で

私は Linq を初めて使用するので、何か間違ったことをしている場合は助けてください。

4

1 に答える 1

1

このようなことを行って、null 値をチェックすることもできます

たとえば、RetailerId について以下に示します。

object resultOfSum = result.Where(
                       i =>
                       i.Date >= localStart && i.Date <= localEnd && i.RetailerId !=null ? i.RetailerId== retailer.Id:i.RetailerId==null &&
                       i.ManufacturerId == manufacturerRow.Id
                       && i.CountryId == countryRow.Id && i.CategoryId == categoryRow.Id).Sum(i=>(int?)(i.WidgetClicks))??0;
                    if(resultOfSum!=null)
                    {
                        retailerWeeklyClickCount = (Convert.ToInt32(resultOfSum));
                    }
于 2013-11-12T12:27:47.837 に答える