【问题标题】:Fetch records from table in the sequence of provided list in C#在 C# 中按照提供的列表顺序从表中获取记录
【发布时间】:2016-07-26 07:07:15
【问题描述】:

如何从同一整数列表序列中的表中获取记录?

我有一个list<int>

List<int> reorderNarrowerTermIds = new List<int>();
reorderNarrowerTermIds.Add(2,7,4,9);

现在我想以与上面列表相同的顺序从表中获取记录。

var lstTerm = _context.table.Where(n => reorderNarrowerTermIds.Contains(n.TermId)).ToList();

上面的 linq 语句给出了 2,4,7,9 TermId 序列的记录,但我想要 2,7,4,9 TermId 序列。

我卡在这里了。

【问题讨论】:

  • 可以试试.OrderBy(some property)
  • @MKasprzyk .OrderBy 会将其按升序或降序排列,OP 希望它与reorderNarrowerTermIds 的顺序相同。
  • .OrderBy 和 .Select(n => n) 根本不起作用。
  • 嗯,我真的不明白 _context.table 是什么以及它可能包含什么信息......如果没有重复,那么交换 arround _context.table。和 ReordernarrowrTermIds

标签: c# entity-framework linq list


【解决方案1】:

这应该可以解决问题,按出现的索引排序:

var lstTerm = _context.table.Where(n => reorderNarrowerTermIds.Contains(n.TermId)).ToList()
                      .OrderBy(x => reorderNarrowerTermIds.IndexOf(x.TermId)).ToList();

因此,reorderNarrowerTermIds 中索引 0 处的项目的顺序因子为 0,并首先显示在结果列表中。同样适用于 1、2 等的升序...

【讨论】:

  • 谢谢,它救了我的命。 :)
【解决方案2】:

仍然不确定您从_context.table 获得的信息是什么样的

List<int> SearchNumbers = new List<int> { 2,7,4,8 };
List<int> numbers = new List<int> { 1,2,3,4,5,6,7,8,9 };
var lstTerm = numbers.Where(n => SearchNumbers.Contains(n)).ToList();

这将显示 2,4,7,8

List<int> SearchNumbers = new List<int> { 2,7,4,8 };
List<int> numbers = new List<int> { 1,2,3,4,5,6,7,8,9 };
var lstTerm = SearchNumbers.Where(n => numbers.Contains(n)).ToList();

这将显示 2,7,4,8

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-14
    • 2019-07-16
    相关资源
    最近更新 更多