exhibits
包含按特定顺序排列的ID。当我查询另一个表以获取基于BMI
ID的exhibit
ID时,顺序不一样。我没有在exhibit
中提取第一个文档ID,而是在数据库中提取具有相同exhibit
id的第一条记录,但我希望它能够将数据库中的记录拉到同一个以exhibits
ID排序。
var exhibits = _context.ApExhibits.Where(x => x.CASE_ID == apDockets.CASE_ID)
.Where(x => x.EXHIBIT_NBR != null)
.Where(x => !documents617.Contains(x.DOC_ID))
.OrderBy(x => x.EXHIBIT_NBR)
.Select(x => x.DIM_ID).ToList();
if (exhibits.Count > 0)
{
var bmiIds =
_context.DocumentImages.Where(x => exhibits.Contains((int)x.DIM_ID))
.Select(x => (int)x.BMI_ID).ToList();
}
答案 0 :(得分:0)
似乎您的第一个集合exhibits
是基于EXHIBIT_NBR
排序的,而当您查询_context.DocumentImages
时,您并未按相同属性对其进行排序,因此您将会根据源序列中元素的顺序接收结果,在本例中为_context.DocumentImages
。基本上,你说“给定源序列DocumentImages
的一个元素,在exhibits
集合中线性搜索,如果有一个符合给定条件的元素,则保留元素源序列“。
因此,假设要传递到DocumentImages
子句的源序列Where
中的第一个元素与集合id
中的元素具有等效exhibits
,但是exhibits
中的元素位于5th
位置,当我们执行ToList()
eager 对方法的操作,而技术上应该在结果列表的5th
位置,因为来自exhibits
的匹配元素也位于5th
位置。
因此,为了使元素与exhibits
具有相同的顺序,一个解决方案是内部联接 DocumentImages
和exhibits
集合相当于检查一个集合中的一个元素是否包含在另一个集合中。然后,我们可以使用与exhibits
相同的属性进行排序。
查询语法示例:
var bmiIds = (from e in _context.ApExhibits
join x in _context.DocumentImages on e.DIM_ID equals (int)x.DIM_ID
where exhibits.Contains((int)x.DIM_ID)
orderby e.EXHIBIT_NBR
select (int)x.BMI_ID).ToList();
使用流利语法的示例:
var bmiIds = _context.ApExhibits
.Join(_context.DocumentImages,
e => e.DIM_ID,
x => (int)x.DIM_ID,
(e, x) => new { e.EXHIBIT_NBR, x.BMI_ID })
.Where(x => exhibits.Contains((int)x.DIM_ID))
.OrderBy(e => e.EXHIBIT_NBR)
.Select(x => (int)x.BMI_ID).ToList();