如何使用字符串列表搜索上下文并对其进行排序?
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 Join
和OrderBy
操作根据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;
【讨论】:
以上是关于如何使用字符串列表搜索上下文并对其进行排序?的主要内容,如果未能解决你的问题,请参考以下文章
如何使客户端-服务器套接字应用程序以同步的方式访问数据并对其进行测试
是否有任何功能可以帮助在颤振应用中添加朋友并对其进行排序? [关闭]
如何访问 *ngFor 中的“索引”并对其进行编辑(不能删除列表中的多个项目)