foreach с параметром where и condition, который должен проверяться двумя переменными - PullRequest
0 голосов
/ 04 октября 2018

Я запрашиваю список студентов, передающих имена контроллера 2, используя 2 переменные Dname и Gname.В Dname некоторое имя, которое начинается с буквы D, в Gname som ename, которое начинается с буквы G.

innerJoinQuery.Where(item => 
    (string.IsNullOrWhiteSpace(Dname) || item.StudentName== Dname) 
    && 
    (string.IsNullOrWhiteSpace(Gname) || item.StudentName== Gname)
)

Условие: если я не передаю имена, я получаю полный список студентов. Это работает

Если я передаю только Dname, я получаю список студентов с именами, начинающимися с D. Это работает

Если я передаю только Gname Iполучить список студентов с именами, начинающимися с G. Это работает

Но если я передам обе переменные, то ничего не получу.Но я хочу получить список студентов, имена которых начинаются с Dname var и Gname var.Как я могу сделать это?

ОБНОВЛЕНИЕ

Если я использую этот код:

        (string.IsNullOrWhiteSpace(Dname) && string.IsNullOrWhiteSpace(Gname ) 
    || item.StudentName.ToString() == Dname.ToString() ||
item.StudentName.ToString() == Gname.ToString())

и отправляю только Dname, тогда я получаю исключение:

System.NullReferenceException: 'Object reference not set to an instance of an object.'

Gname was null.

1 Ответ

0 голосов
/ 04 октября 2018

Не говорю, что это путь, но он будет соответствовать вашим требованиям:

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

public class Student
{
    public int Id {get;set;}
    public string Name {get;set;}
}

class Program
{
    static List<Student> Students {get;set;}

    static void Main()
    {
        Students = new List<Student>
        {
            new Student{ Id = 1, Name = "G"},
            new Student{ Id = 2, Name = "D"},
            new Student{ Id = 3, Name = "G"},
            new Student{ Id = 4, Name = "G"},
            new Student{ Id = 5, Name = "D"},
            new Student{ Id = 6, Name = "E"},
            new Student{ Id = 7, Name = "F"},
            new Student{ Id = 8, Name = "G"},
            new Student{ Id = 9, Name = "H"}
        };

        WriteStudents(null, null); // 1,2,3,4,5,6,7,8,9
        WriteStudents(null, "D");  // 2,5
        WriteStudents("G", null);  // 1,3,4,8
        WriteStudents("G", "D");   // 1,2,3,4,5,8
    }

    static void WriteStudents(string GName, string DName)
    {
        var query = Students.Where(s => string.IsNullOrWhiteSpace(GName)
                                     && string.IsNullOrWhiteSpace(DName)
                                     || s.Name == GName || s.Name == DName)
                            .Select(s => s.Id); // used to print the Id

        Console.WriteLine(string.Join(",", query));
    }
}

Очевидно, что метод WriteStudents можно написать:

static void WriteStudents(string first = null, string second = null)
{
    var query = Students.Where(s => string.IsNullOrWhiteSpace(first)
                                 && string.IsNullOrWhiteSpace(second)
                                 || s.Name == first || s.Name == second)
                        .Select(s => s.Id); // used to print the Id

    Console.WriteLine(string.Join(",", query));
}

Итак, выможно назвать это:

WriteStudents();         // 1,2,3,4,5,6,7,8,9
WriteStudents("D");      // 2,5
WriteStudents("G");      // 1,3,4,8
WriteStudents("G", "D"); // 1,2,3,4,5,8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...