2016-08-11 6 views
3

AngularJsでlinq.jsを使用していますが、私は多くの場所で使用していますが、今は別の場所で使用していて動作しません。動作していないということは、私が望む結果を達成していないことを意味します。常にそれは{}です。私が何か悪いことをしている場合、コードの下を見てください。 Angular.js linq.jsフィルタが正しく動作しない場合

var app = angular.module('testApp', ['angular.filter', 'angular-linq', 'ngSelect2']); 
    app.controller('testController', function ($scope, $http, $timeout, $q, $linq){ 
    $scope.Vendors = 
    [ 
     {VendorId:"VND001", VendorName:"Pharma Plus Pharmacy", Address:"Bahawalpur"}, 
     {VendorId:"VND001", VendorName:"Pakistan Pharma", Address:"Bahawalpur"} 
    ]; 
    $scope.InvoiceItems = 
    [ 
    { 
     VendorId:"VND001", 
     ItemName:"Gold Set Jewellery", 
     ItemDesc:"Some Description", 
     Cost:280.50, 
     Quantity:50 
    }, 
    { 
     VendorId:"VND001", 
     ItemName:"First Class HandWatch", 
     ItemDesc:"Some Description", 
     Cost:100.50, 
     Quantity:50 
    }, 
    { 
     VendorId:"VND002", 
     ItemName:"Gold Set Jewellery", 
     ItemDesc:"Some Description", 
     Cost:280.50, 
     Quantity:50 
    }, 
    { 
     VendorId:"VND002", 
     ItemName:"First Class HandWatch", 
     ItemDesc:"Some Description", 
     Cost:100.50, 
     Quantity:50 
    }, 
    ]; 
    $scope.totalAmount = function(vendorId){ 
     return $linq.Enumerable().From($scope.InvoiceItems).Where("x => x.VendorId =="+vendorId).Select(function(x){ 
      return (+x.Cost)*x.Quantity; 
     }).Sum(); 
    } 
    } 
} 

は迅速な対応が理解されるであろう

<div class="row" ng-app="testApp"> 
    <div class="col-xs-12" ng-controller="testController" ng-init="initializeDefault()"> 
    <div ng-repeat="v in Vendors"> 
     <div>{{ v.VendorId }}</div> 
     <div>{{ v.VendorName }}</div> 
     <div>{{ v.Address }}</div> 
     <div>{{ totalAmount(v.VendorId) }}</div> 
    </div> 
    </div> 
</div> 

HTML下記をご覧になってください。

答えて

2

最初の問題は、where句の述語が不正であることです。

x.VendorIdは文字列で、それをvendorIdに渡されたものと比較しようとしています。しかし、生成するラムダは効果的です。

x => x.VendorId ==VND001 

結果が得られません。

代わりにあなたが生成する必要があります。

x => x.VendorId == 'VND001' 

はあなたのクエリが(よりコンパクトなラムダ構文を使用して)されるべきである:あなたがこれらのクエリを組み合わせた場合

$linq.Enumerable().From($scope.InvoiceItems) 
    .Where("$.VendorId == '" + vendorId + "'") 
    .Select("+$.Cost * $.Quantity") 
    .Sum(); 

しかし、それは良いだろう別々のものではなく、クエリの一部として合計を含めることができます。 2つの配列を結合する必要があります。

$scope._vendors = ...; 
$scope._invoiceItems = ...; 
$scope.VendorQuery = function() { 
    return $linq.Enumerable().From($scope._vendors) 
     .GroupJoin($scope._invoiceItems, "$.VendorId", "$.VendorId", 
      "{ Id: $.VendorId, Name: $.VendorName, Address: $.Address, " 
      + "Total: $$.Sum('+$.Cost * $.Quantity') }") 
     .ToArray(); 
} 

は、その後、あなたのビューにバインド:

<div ng-repeat="v in VendorQuery()"> 
    <div>{{ v.Id }}</div> 
    <div>{{ v.Name }}</div> 
    <div>{{ v.Address }}</div> 
    <div>{{ v.Total }}</div> 
</div> 
+0

おかげで、今や完璧に取り組んでいます。 –

+0

良いキャッチジェフ。 upvoted :) –

関連する問題