Теперь как метод расширения:
public static class LinqExt
{
public static IEnumerable<TResult> LeftOuterJoin<TLeft, TRight, TKey, TResult>(this IEnumerable<TLeft> left, IEnumerable<TRight> right, Func<TLeft, TKey> leftKey, Func<TRight, TKey> rightKey,
Func<TLeft, TRight, TResult> result)
{
return left.GroupJoin(right, leftKey, rightKey, (l, r) => new { l, r })
.SelectMany(
o => o.r.DefaultIfEmpty(),
(l, r) => new { lft= l.l, rght = r })
.Select(o => result.Invoke(o.lft, o.rght));
}
}
Используйте, как обычно, вы используете join:
var contents = list.LeftOuterJoin(list2,
l => l.country,
r => r.name,
(l, r) => new { count = l.Count(), l.country, l.reason, r.people })
Надеемся, что это сэкономит вам некоторое время.
Интересно, есть ли способ обработать пользователя, нажав , введите , пока вводя EditText, что-то вроде событие HTML onSubmit.
Да.
Также интересно, есть ли способ управлять виртуальной клавиатурой в таким образом, чтобы кнопка "Готово" была обозначил что-то другое (например, «Вперед») и выполняет определенное действие при нажатии (опять же, как onSubmit).
Также да.
Вы захотите посмотреть на атрибуты android: imeActionId
и android: imeOptions
, а также на ] setOnEditorActionListener ()
, все в TextView
.
Для изменения текста кнопки «Готово» на настраиваемую строку используйте:
mEditText.setImeActionLabel("Custom text", KeyEvent.KEYCODE_ENTER);
Kotlin
editTextVar?.setOnKeyListener { v, keyCode, event ->
if((event.action == KeyEvent.ACTION_DOWN)
&& (event.keyCode == KeyEvent.KEYCODE_ENTER)){
//Do something, such as loadJob()
loadJob()
return@setOnKeyListener true
}
false
}