I'm trying to use LINQ.JS (not .Net LINQ!) and cannot get the comparerSelector concept.
I have two arrays of objects, every object contains Id,Name,Date,Passport etc.
I want to have a difference between them by the following 2 fields only: Id,Name. Difference in Date and Passport should be ignored. How to write the comparerSelector?
The following works for Id only:
Enumerable.From(p2)
.Except(p1, "$.Id}")
.ForEach(function (x) { alert('Id == ' + x.Id); });
This works too:
Enumerable.From(p2)
.Except(p1, function(x) { return x.Id; })
.ForEach(function (x) { alert('id == ' + x.Id); });
How to add the Name field to the comparer?
The following code doesn't work:
Enumerable.From(p2)
.Except(p1, function(x) { return { Id : x.Id, Name : x.Name }; })
.ForEach(function (x) { alert('Id == ' + x.Id); });
Regards,
As with all comparators in LINQ.js, you should return a string or some other object that has a distinct string representation.
Personally, I would opt to return strings exclusively:
const query = Enumerable.From(p2)
.Except(p1, "[$.Id, $.Name].join(':')")
.ToArray();