Что означает "Заменить одним вызовом на одиночный"? - программирование
Подтвердить что ты не робот

Что означает "Заменить одним вызовом на одиночный"?

При использовании LINQ с Single() я всегда получаю свою строку кода, подчеркнутую зеленым цветом, с предложением "Заменить одним вызовом на одиночный". Что это значит? Вот пример строки кода, которая приводит к этому предложению:

var user = db.Users.Where(u => u.UserID == userID).Single();

Как вы можете видеть, я использую Single() только один раз. Итак... какая сделка?

4b9b3361

Ответ 1

Я предполагаю, что это означает, используйте перегрузку Single, которая берет предикат вместо использования Where и Single вместе:

var user = db.Users.Single(u => u.UserID == userID);

Ответ 2

var user = db.Users.Single(u => u.UserID == userID)

Синтаксический сахар

Ответ 3

Букет выражений Linq, Перечислимые методы, работайте таким образом, как метод Single, который принимает предикат и возвращает true, только если условие выполнено (тест прошел), в противном случае - false.

Они должны использоваться вместо элементов Where() и Single() вместе:

var user = db.Users.Single(u => u.UserID == userID); 
// Checks for if there is one and, only one element that satisfy the condition.

и

var user = db.Users.Any(u => u.UserID == userID);  
// Checks for if there are any elements that satisfy the condition.

и

var user = db.Users.All(u => u.UserID == userID);  
// Checks if all elements satisfy the condition.

Ответ 4

Выберите *, из которого в Linq Lambda можно ввести поле в (список, из поля), используя два подхода

  • Использование "Содержит"
  • Использование "Join"

Пример кода здесь в DotNetFiddle

введите описание изображения здесь

using System;
 using System.Linq;
using System.Collections;
using System.Collections.Generic;

public class Program
{
    public static void Main()
    {

    //Initializing a collection of 4 Employees fromthree Different departments <Name of Employee, Dept ID>
    List<KeyValuePair<string, int>> EmployeeDept = new List<KeyValuePair<string, int>> {
        new KeyValuePair<string, int> ("Gates",2),
        new KeyValuePair<string, int> ("Nadella",2),
            new KeyValuePair<string, int> ("Mark",3),
        new KeyValuePair<string, int> ("Pichai",4)
    };

    //Filter the Employees belongs to these department
    int[] deptToFilter ={3,4};

    //Approach 1 - Using COntains Method
    Console.WriteLine ("Approach 1 - Using Contains");
    Console.WriteLine ("==========================================");   
    var filterdByContains = EmployeeDept.Where(emp => deptToFilter.Contains(emp.Value));
    foreach (var dept3and4employees in filterdByContains)
    {
        Console.WriteLine(dept3and4employees.Key+" - "+dept3and4employees.Value);
    }

    //Approach 2 Using Join
    Console.WriteLine ("\n\nApproach 2 - Using Join");
    Console.WriteLine ("==========================================");   
    var filteredByJoin = EmployeeDept.Join(
        deptToFilter,
        empdept => empdept.Value, 
        filterdept => filterdept, 
        (empdep,filddep) => new KeyValuePair<string, int>(empdep.Key, empdep.Value)
    );

    foreach (var dept3and4employees in filteredByJoin)
    {
        Console.WriteLine(dept3and4employees.Key+" - "+dept3and4employees.Value);
    }

}
}