为更好的查询搜索创建一个函数

本文关键字:一个 函数 创建 更好 查询 搜索 | 更新日期: 2023-09-27 18:17:09

我对使用委托和函数编写c#非常非常陌生。我一小时前看了一个视频

我正试图写一个函数,这将允许我写一个灵活的方法来建立在我的mvc应用程序中使用EF和IQueryable Where子句

为了解释这一点,我想我应该写一个小例子来说明我作为一个控制台应用程序所要做的事情

public static void Main(string[] args)
    {
        var city1 = new ArgsSearch() {Address = "city1"};
        var city2 = new ArgsSearch() { Address = "city2" };
        var city1Dealers = DummyDealers().Where(GenerateSearchCriteria<CarDealer>(city1)).ToList();
        var city2Dealers = DummyDealers().Where(GenerateSearchCriteria<CarDealer>(city2)).ToList();
        foreach (var carDealer in city1Dealers)
        {
            Console.WriteLine(carDealer.Name);
        }
        Console.WriteLine("_______________________________________");
        foreach (var carDealer in city2Dealers)
        {
            Console.WriteLine(carDealer.Name);
        }
        Console.WriteLine("_______________________________________");
    }
    public static List<CarDealer> DummyDealers()
    {
        return new List<CarDealer>()
        {
            new CarDealer() {Address = "city1", Id = 1, Name = "name1"},
            new CarDealer() {Address = "city1", Id = 2, Name = "name2"},
            new CarDealer() {Address = "city2", Id = 3, Name = "name3"},
            new CarDealer() {Address = "city2", Id = 4, Name = "name4"}
        };
    }

    public static Func<TSearch, bool> GenerateSearchCriteria<TSearch>(ArgsSearch args) where TSearch : IBaseModel
    {
        if (this.GetType() == typeof(CarModel))
        {
            //return
            return e => e.Name == args.Name;// && e.Cost == args.Cost;
        }
        if (GetType() == typeof(CarDealer))
        {
            return e => e.Name == args.Name;// && e.Address == args.Address;
        }
        return e => e.Name==args.Name;
    }

    public class ArgsSearch
    {
        public string Name { get; set; }
        public string Address { get; set; }
        public decimal Cost { get; set; }
    }

我走对了吗?我怎么知道TSearch是CarModel还是CarDealer?允许应用自定义搜索值

感谢您的任何建议和帮助,我将非常感激!

为更好的查询搜索创建一个函数

你需要转换:

(警告:前面有丑陋的代码)

    if (typeof(TSearch) == typeof(CarModel))
    {
        //return
        return e => e.Name == args.Name && ((CarModel)(object)e).Cost == args.Cost;
    }
    if (typeof(TSearch) == typeof(CarDealer))
    {
        return e => e.Name == args.Name && ((CarDealer)(object)e).Address == args.Address;
    }
    return e => e.Name==args.Name;