简体   繁体   English

C# linq 和表达式

[英]C# linq and expression

I am new to c# and I am having problem understanding the given problem statement.我是 C# 新手,在理解给定的问题陈述时遇到问题。 Problem statement : Write a program to find the vehicles released between certain year.问题陈述:编写一个程序来查找特定年份之间发布的车辆。

  1. class Vehicle is already given for your reference.类 Vehicle 已经给出供您参考。

  2. class Program contains a hard-coded list with vehicle information in the 'vehicleList' attribute.类 Program 在“vehicleList”属性中包含一个带有车辆信息的硬编码列表。

a) Implement method 'getVehicleName'. a) 实现方法“getVehicleName”。

public static void getVehicleName(int fromYear, int toYear) //method signature public static void getVehicleName(int fromYear, int toYear) //方法签名

This method must must display the vehicle names (from the given list) released between the fromYear and toYear (including these years).此方法必须显示在 fromYear 和 toYear(包括这些年份)之间发布的车辆名称(来自给定列表)。 USING LINQ CONCEPT使用 LINQ 概念

b) Implement method 'Main'. b) 实现方法“Main”。

Get the from year and to year from the user.从用户那里获取年份和年份。 Pass it to 'getVehicleName' method.将其传递给“getVehicleName”方法。

NOTE : NEED NOT call 'getMyExpression' method in Main.注意:不需要在 Main 中调用“getMyExpression”方法。

c) Implement method 'getMyExpression' c) 实现方法“getMyExpression”

public static Expression getMyExpression(int fromYear, int toYear)公共静态表达式 getMyExpression(int fromYear, int toYear)

This method snippet is already given for you.已经为您提供了此方法片段。 THIS METHOD IS FOR TESTING YOUR LINQ QUERY EXPRESSION OR LINQ METHOD EXTENSION.此方法用于测试您的 LINQ 查询表达式或 LINQ 方法扩展。 So fill your query expression or method extension in the space holder provided.因此,请在提供的空间持有者中填写您的查询表达式或方法扩展。 ONLY THE QUERY EXPRESSION OR METHOD EXTENSION.只有查询表达式或方法扩展。 Nothing more need to be implemented in this class.没有什么需要在这个类中实现。

在此处输入图片说明在此处输入图片说明

It seems you're almost there:看来你快到了:

from v in vehicle 
where v.ReleaseYear >= fromYear && v.ReleaseYear <= toYear 
select v.VehicleName

alternatively do the same with method chain或者对方法链做同样的事情

vehicle.Where(v => v.ReleaseYear >= fromYear && v.ReleaseYear <= toYear)
.Select(n => n.VehicleName)

也许继承 List 实现方法getVehicleName作为 linq 查询

public string getVehicleName => this.FirstOrDefault(o => ...
from v in vehicleList where v.ReleaseYear>=fromYear &&v.ReleaseYear<=toYear select n;

While implementing getVehicleName use:在实现getVehicleName 时使用:

from v in vehicleList where v.ReleaseYear>=fromYear && v.ReleaseYear<=toYear 
select v.VehicleName;

And for method extension use:对于方法扩展使用:

vehicleList.Where(s=> s.ReleaseYear>=fromyear && s.ReleaseYear<=toYear).ToList()

Vehicle.cs车辆.cs

public class Vehicle          
{
    public String VehicleId{get; set; }
    public String VehicleName{ get; set; }
    public String Brand { get; set; }
    public int ReleaseYear { get; set; }

    public Vehicle(String vehicleId, String vehicleName, String brand,int releaseYear)
    {
        this.VehicleId = vehicleId;
        this.VehicleName = vehicleName;
        this.Brand = brand;
        this.ReleaseYear = releaseYear;
    }
    
}

Program.cs程序.cs

    static void Main(string[] args)   
    {
        
        
        Console.WriteLine("Enter From Year :");
        int fromYear = int.Parse(Console.ReadLine());
        Console.WriteLine("Enter To Year :");
        int toYear = int.Parse(Console.ReadLine());
        GetVehicleName(fromYear,toYear);
     
        
        
    }
    public static void GetVehicleName(int fromYear , int toYear){
        var resultQuery = from v in VehicleList where v.ReleaseYear >= fromYear && v.ReleaseYear <= toYear orderby v.ReleaseYear select v;
        Console.WriteLine($"Vehicle Name Released Between {fromYear} And {toYear} :");
        foreach (Vehicle s in resultQuery)
        {
            Console.WriteLine(s.VehicleName);

        }
        Console.ReadKey();
        
        
    }
    public static ParameterExpression variableExpr = Expression.Variable(typeof(IEnumerable<Vehicle>), "sampleVar");
    
    public static Expression GetMyExpression(int fromYear, int toYear)
    {  
        
        Expression assignExpr = Expression.Assign(variableExpr, Expression.Constant(from v in VehicleList where v.ReleaseYear >= fromYear && v.ReleaseYear <= toYear orderby v.ReleaseYear select v));
        return assignExpr;
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM