2014-07-18 2 views
4

Попытка проверить результат linq.js FirstOrDefault(), но проверка на null или undefined не работает. Имея некоторые проблемы с отладкой, но я вижу, что он возвращает какой-то объект.linq.js возвращаемое значение (по умолчанию) FirstOrDefault

Нет документации для этого метода в Интернете, которую я мог бы найти.

Я пробовал:

var value = Enumerable.From(stuff).FirstOrDefault('x => x.Name == "Doesnt exist"') 

if (value) { 
    alert("Should be not found, but still fires"); 
} 

if (value != null) 
    alert("Should be not found, but still fires"); 
} 

ответ

9

подписей для функции FirstOrDefault() является:

// Overload:function(defaultValue) 
// Overload:function(defaultValue,predicate) 

Первый параметр всегда по умолчанию значение, возвращаемое, если коллекция пуста. Второй параметр - это предикат для поиска. Использование метода является неправильным, ваш запрос должен быть написан как:

var value = Enumerable.From(stuff) 
    .FirstOrDefault(null, "$.Name === 'Doesnt exist'"); 
+0

Я думаю, что я все же предпочел бы больше C# -образного форматирования использования предложения Where, не уверен, но я согласен, что это более правильный ответ на использование этой функции. Не понял, что вам нужно указать, что такое «default». Благодаря! – RJB

+1

Думаете, вы должны понять, что в C# существуют неявные параметры для методов, фактический тип времени компиляции. Это не то, что вы действительно можете выразить в JS. C# знал, какие значения по умолчанию были для этих типов, поэтому смог заполнить это. В JS нет реальной информации о типе, так что необходимо предоставить значение по умолчанию. Так получилось, что 'undefined' обычно адекватен. –

3

Мы выяснили ответ, как я печатал это. Поскольку есть так мало документации, я поделюсь.

Вам нужно переместить лямбда в предложение Where перед FirstOrDefault().

Когда

var someArray = ["Foo", "Bar"]; 
var result = Enumerable.From(someArray).Where('x => x == "Doesnt exist"').FirstOrDefault(); 

Результат не определен (правильный)

Когда

var someArray = ["Foo", "Bar"]; 
var result = Enumerable.From(someArray).Where('x => x == "Bar"').FirstOrDefault(); 

Результат 'Бар' (правильный)

Когда

var someArray = ["Foo", "Bar"]; 
var result = Enumerable.From(someArray).FirstOrDefault('x => x == "Bar"'); 

Результат 'Foo' (неверная)

+0

спасибо, например .. найти это немного жестко на данный момент – hanzolo

+1

я в конце концов сделал найти несколько лучше документы: HTTP: // Neue. cc/reference.htm – RJB

+0

Я также нашел это. Эта ссылка была наиболее полезной, но, исходя из использования LINQ в C#, у меня были проблемы с этим знанием в эту библиотеку. Я смог сделать то, что мне нужно, чтобы .. все еще надеялся найти еще несколько примеров – hanzolo

Смежные вопросы