【问题标题】:Find out database attribute where searchstring was found (with Entity Framework)找出找到搜索字符串的数据库属性(使用实体框架)
【发布时间】:2017-03-16 14:48:15
【问题描述】:

我有我的 searchString 并想通过一些属性(姓名、电话号码、电子邮件地址等)在 db 表中进行搜索。但我需要知道找到 searchString 的属性。有什么优雅的解决方案吗? 现在我有很多类似的代码块(对于名称一,对于电话号码一,...),如下所示:

        var searchString = "text to search...";
        var searchResultItems = new List<SearchResultItem>();            
        // Search in client names
        var clients = db.Clients.Where(x => x.Name.Contains(searchString)); // db context
        foreach (var client in clients)
        {
            var searchResultItem = new SearchResultItem()
            {
                ResultLabel = client.Name,
                SearchResultType = SearchResultType.ClientName,
            };
            searchResultItems.Add(searchResultItem);
        }

【问题讨论】:

    标签: c# .net entity-framework


    【解决方案1】:

    您可以以更紧凑的方式编写它,同时从性能角度来看这将是更好的解决方案(因为您将从整个表中仅选择单个字段):

    var nameQuery = db.Clients
        .Where(x => x.Name.Contains(searchString))
        .Select(x => new SearchResultItem {
            ResultLabel = client.Name,
            SearchResultType = SearchResultType.ClientName,
        });
    

    以类似的方式创建 phoneNumberQuery、emailAddressQuery 等。

    然后你可以像这样.Concat()所有这样的部分到一个查询中:

    var = searchResultItems = nameQuery
        .Concat(phoneNumberQuery)
        .Concat(emailAddressQuery)
        .Concat(...)
        .ToArray();
    

    你也可以用表达式的方式写方法

    IQueryable<SearchResultItem> GetSearchQuery<T>(IQueryable<T> set, Expression<Func<T, string>> fieldSelector, string searchString, SearchResultType resultType) {
        // homework here
    }
    

    这将根据特定字段生成选择查询,但在您的特定情况下,我认为这不值得。

    【讨论】:

    • 我不确定它是否正是我正在寻找的(我仍然需要多次调用脚本)但它似乎比我的解决方案更好。
    猜你喜欢
    • 1970-01-01
    • 2014-05-06
    • 2015-07-09
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 2020-05-27
    相关资源
    最近更新 更多