使用linqJS进行内连接



我创建一个dateRange,它是一个日期数组。

然后我有一个数组的日期数字,如0星期日,1星期一等…

现在我想根据visibleWeekDays数组获取所有dateRange日期。

解决方案在getVisibleDateRange函数中。

但是我想用LINQ来做,因为为什么要重新发明轮子…

内部或外部选择器仍然需要.day(),因为其中一个选择器是momentJS对象。

但是要获得星期几,我需要将"。day()"放入不能工作的linqJS字符串中…

你的linqJS解决方案是什么?

// Arrange
var startDate = moment(new Date(2014, 1, 1));
var endDate = moment(new Date(2014, 1, 15));
var visibleWeekDays = [0,1]
// Act
var dates = dateFactory.dateRange(startDate, endDate);
var visibleDays = dateFactory.getVisibleDateRange(visibleWeekDays ,dates);

 function getVisibleDateRange(visibleWeekDays, dateRange) {
        var visibleDateRange = [];
        for (var i = 0; i < dateRange.length; i++) {
            for (var j = 0; j < visibleWeekDays.length; j++) {
                var currentDate = dateRange[i];
                var dayOfWeek = currentDate.day();
                var visibleDayOfWeek = visibleWeekDays[j];
                if (visibleDayOfWeek === dayOfWeek) {
                    visibleDateRange.push(currentDate);
                }
            }
        }        
        return visibleDateRange;
    }
    var visibleDateRange = Enumerable.from(visibleWeekDays).join(dateRange,"","","outer,inner=>outer + ':' + inner")

我将如何编写内部连接:

var dateRange = Enumerable.Range(1, 15).Select("new Date(2014, 1, $)");
var visibleWeekDays = Enumerable.From([0, 1]);
var visibleDateRange = dateRange.Join(visibleWeekDays,
    "$.getDay()", // outer selector
    "$",          // inner selector
    "$")          // result selector (select outer value, the date)
    .ToArray();

在这里,我使用了更紧凑的语法来定义lambda。基本上lambda通常最多有4个参数。因此,您可以通过在标识符中添加额外的$来引用第n个参数。因此,$为第一个参数,$$为第二个参数,以此类推。

连接的参数与您在LINQ中进行的调用完全相同。第一个参数是内部集合,然后是外部选择器、内部选择器和结果选择器。

由于外部集合是日期,因此您可以访问相应的项及其属性。因为我们想要得到调用date.getDay()的结果,所以只需在对象(第一个参数)上调用getDay()

相关内容

  • 没有找到相关文章