如何使用字符串列表搜索上下文并对其进行排序?

Posted

技术标签:

【中文标题】如何使用字符串列表搜索上下文并对其进行排序?【英文标题】:How to search a context using a list of string and order it? 【发布时间】:2020-02-10 10:58:49 【问题描述】:

我有一个需要在上下文中搜索的字符串数组。

List<string> nameList

我有一个要搜索的上下文

context.Name

我的代码在这里:

            List<Guid> nameIds= context.Name
                .Where(n => nameList.Contains(n.Description)
                .Select(n=> n.NameId)
                .ToList();

我可以获得我的名字的 ID,但我希望它按 nameList 排序,而不是按上下文本身。

例如。我的数据库中的名字分别是 [Ben, Maria, Liza] 和 [0, 1, 2] id。我的nameList 是 [Liza, Maria] 井井有条。 nameIds 将是 [1,2] 因为它是按上下文排序的。我希望它由nameList 订购; [2,1]

【问题讨论】:

请检查发布的答案,如果它解决了您的问题,请告诉我。 【参考方案1】:

您可以通过Linq JoinOrderBy 操作根据nameList 的项目顺序进行排序。以下语句结果具有基于nameList 的项目顺序的NameId 集合。

List<Guid> nameIds = context.Name.Where(n => nameList.Contains(n.Description)).ToList()
                          .Join(nameList, n => n.Description, l => l, (n, l) => new n.NameId, l)
                         .OrderBy(o => o.l)
                         .Select(s => s.NameId).ToList();

如果您在上面注意到:

我将Where with Contains 查询保持不变,以确保仅从数据库返回过滤后的数据。如果您删除此子句并进行直接连接,则将从数据库返回完整的数据集,这可能会导致您的应用程序出现性能问题。 在返回IQueryable,ToList 时执行查询以从数据库中获取数据 Join 操作加入数据库数据和nameList OrderBy根据描述对数据进行排序(nameList项目的实际顺序) Select 选择 NameId

创建了thisdotnetfiddle 来演示整个 linq 语句的工作原理。

【讨论】:

稍后将在我的代码上尝试并回复您。谢谢老哥!【参考方案2】:

尝试 OrderByDescending lambda 表达式:

void GetOrderedData()

    IEnumerable<MyObject> data = Enumerable.Range(1, 20).Select(x => new MyObject
    
        id = x,
        name = "Name " + x
    );

    var ordereddata = data.Where(x => x.id > 6 && x.id < 14).OrderByDescending(x => x.id).Select(x => x.name);


public class MyObject

    public int id  get; set; 
    public string name  get; set; 

过滤+排序数据前后:

*** 文章:OrderBy descending in Lambda expression?

【讨论】:

【参考方案3】:

您希望结果保持搜索数据的顺序。 所以没有顺序,只要加入他们应该对你有用。

给你一个例子

class Program

    static void Main(string[] args)
    
        // searched data from db
        List<Person> people = new List<Person>  new Person(0, "Ben"), new Person(1, "Maria"), new Person(2, "Liza") ;
        // search data
        List<string> nameList = new List<string>  "Liza", "Maria" ;

        var result = nameList.Join(people, n => n, p => p.Name, (n, p) => p.Id).ToList();
    


class Person

    public Person(int id, string name)
    
        Id = id;
        Name = name;
    
    public int Id  get; set; 
    public string Name  get; set; 

【讨论】:

以上是关于如何使用字符串列表搜索上下文并对其进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

sql 从连接的查询中获取所有列,搜索列名并对其进行排序

如何使客户端-服务器套接字应用程序以同步的方式访问数据并对其进行测试

是否有任何功能可以帮助在颤振应用中添加朋友并对其进行排序? [关闭]

如何访问 *ngFor 中的“索引”并对其进行编辑(不能删除列表中的多个项目)

如何从数组列表中提取项目并对其进行计数,以便从元素及其总计数(正确)在 Java 中创建映射?

从 txt 中读取数字并对其进行排序 - 转换错误