2016-10-05 2 views
0

Ich versuche, einen Wert mit einer linq.js Ausdruck zuweisen. Die Linq lamba expresion würde so aussehen:Linq zu linq.js Übersetzung mit Wert Zuweisung

List<SearchSpaceRoom> roomsAvailable = Spaces.Select(s => 
    { 
     s.Available = s.Rooms.Where(r => r.RoomTypeRanges.Any(t => t.Type.ToString() == "Theatre" && t.Min <= 101 && t.Max >= 200)).Count(); 
     return s; 
    }) 
    .ToList(); 

Aber ich kann den Weg nicht finden dies mit linq.js. zur Arbeit zu tun Die Idee ist, so etwas zu haben:

var data = eval($('#SpaceJson').val()); 
var results = $.Enumerable.From(data).ToArray(); 
var layout = 'Theatre'; 
var minDelegates = '101'; 
var maxDelegates = '200'; 

results = $.Enumerable.From(results) 
    .Select('{$.Available = $.Rooms.Where($.RoomTypeRanges.Any($.Type == \'' + layout + '\' && $.Min <= \'' + parseInt(minDelegates) + '\' && t.Max >= \'' + parseInt(maxDelegates) + '\')).Count(); return $; }').ToArray(); 

Ist das möglich ist, kann jemand empfehlen, mir den besten Ansatz, dies zu tun?

Wenn Sie weitere Informationen über den Ausdruck benötigen: ist es die Anzahl der Räume, die die Anforderungen von Min und Max Menschen für ein bestimmtes Layout (Klassenzimmer, Theater) für jeden Raum entspricht. Die Grundstruktur ist wie:

  1. Ein Raum enthält Zimmer
  2. Ein Raum enthält die verschiedenen Layouts
  3. Ein Layout der max enthält ein min Menschen

Ich kann alle die Datenstruktur zur Verfügung stellen Wenn du es brauchst, aber ich glaube, das wird mehr verwirren als Hilfe.

Danke!

EDIT: ich die Klassen hinzufügen hier

public class SearchSpaceViewModel 
{ 
    public List<SearchSpaceRoom> Spaces { get; set; } 
    public string RoomsJson { get; set; } 
} 

public class SearchSpaceRoom 
{ 
    public List<RoomItem> Rooms { get; set; } 
    public int Available { get; set; } 
    . 
    . 
    . 
} 

public class RoomItem 
{ 
    public List<RoomTypeRange> RoomTypeRanges { get; set; } 
    . 
    . 
    . 

} 

public class RoomTypeRange 
{ 
    public string Type { get; set; } 
    public int Max { get; set; } 
    public int Min { get; set; } 
} 

Antwort

0

Nur diese zu schließen, schaffte ich es mit einer Mischung aus JQuery und linq.js zu tun:

function ParseJson() { 
     var data = eval($('#RoomsJson').val()); 
     var results = $.Enumerable.From(data).ToArray(); 
     var layout = 'Theatre'; 
     var intMin = 101; 
     var intMax = 200; 

     $.each(results, function (i, space) { 
      var count = 0; 
      $.each(space.Rooms, function (j, room) { 
       if ($.Enumerable.From(room.RoomTypeRanges).Any('$.Type == \'' + layout + '\' && $.Min <= ' + intMin + ' && $.Max >= ' + intMax)) { 
        count++; 
       } 
      }); 
      space.Available = count; 
     }); 

     return results; 
    } 

Ich bin sicher, dass es sind elegantere Lösungen, aber es scheint gut zu funktionieren.