带有两个选择子句的内部联接LinQ MVC

时间:2018-07-02 18:39:00

标签: c# linq model-view-controller

Query result from search

问候,我是使用linq语法的新手,我需要帮助翻译图片中的查询以在c#中获得所需的结果。我有两个问题。首先,我该如何在c#中使用linq语法进行内部联接,以便在图像中显示所需的结果。其次,为了显示从查询中获得的数据,我是否需要创建一个ViewModel,该ViewModel从查询搜索中使用的不同表中包含3个ViewModel?

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

正如levelonehuman所说,linq旨在查询数据。假设您有几节课:

public class Person
{

    public static class Factory
    {
        private static int currentId = 0;
        public static Person Create(string firstName, string lastName, string phoneNumber, int companyId)
        {
            return new Person()
            {
                Id = ++currentId,
                FirstName = firstName,
                LastName = lastName,
                PhoneNumber = phoneNumber,
                CompanyId = companyId
            };
        }
    }

    public int Id { get; private set; }

    public string FirstName { get; private set; }

    public string LastName { get; private set; }

    public string PhoneNumber { get; private set; }

    public int CompanyId { get; private set; }
}

public class Company
{
    public static class Factory
    {
        private static int companyId=0;
        public static Company Create(string name, string city, string state, string phoneNumber)
        {
            return new Company()
            {
                Id = ++ companyId,
                City = city,
                State = state,
                Name = name,
                PhoneNumber = phoneNumber
            };
        }
    }

    public int Id { get; set; }

    public string Name { get; set; }

    public string City { get; set; }

    public string State { get; set; }

    public string PhoneNumber { get; set; }
}

然后您只想查看来自某个区号的人员,您可以执行以下操作:

class Program
{
    static void Main(string[] args)
    {
        var companies = new[]
        {
            Company.Factory.Create("ABC", "Indianapolis", "In", "(317) 333 5555"),
            Company.Factory.Create("Def", "Bloominton", "In", "(812) 333 5555"),
        };

        var people = new[]
        {
            Person.Factory.Create("Jane", "Doe", "(317) 555 7565", 1),
            Person.Factory.Create("Paul", "Smith", "(812) 555 7565", 2),
            Person.Factory.Create("Sean", "Jackson", "(317) 555 7565", 2),
            Person.Factory.Create("Jenny", "Gump", "(812) 555 7565", 1)
        };

        var peopleFromIndianapolis =
        (
            from company in companies
            join person in people on company.Id equals person.CompanyId

            where person.PhoneNumber.StartsWith("(317)")
            orderby person.LastName, person.FirstName
            select new
            {
                person.FirstName,
                person.LastName,
                company.Name
            }
        ).ToList();

        foreach (var person in peopleFromIndianapolis)
        {
            Console.WriteLine($"PersonName: {person.LastName}, {person.FirstName} - Company:{person.Name}");
        }

    }

}

希望这会有所帮助!