首页 > 解决方案 > 数组包含来自表的相同数据,而不是使用 ToArray() 的不同数据

问题描述

我陷入了一个疯狂的问题。

我有一个字符串列表

string[] mat = { "AAD","AAV"};

我正在创建一个对象数组

Car[] cars = new Car[] {};

我查询 RefNumber 在 mat 数组中的表 Car

Cars = (from lc in _context.Car.Where(c => mat.Contains(c.RefNumber)) select lc).ToArray();

查询按预期运行(输出显示正确的 sql :

select * from Car c where c.RefNumber in ('AAD','AAV')

然而,该数组包含 2 行但数据相同!AAD。我从来没有看到阵列内填充了 AAV。怎么了?我也试过列表。我被困住了。

标签: c#linq

解决方案


您是否尝试将查询结果分组到两个数组中,一个用于 AAD,一个用于 AAV?如果是这样,我相信您正在寻找 Linq GroupBy

就像是:

Cars = (from lc in _context.Car.Where(c => mat.Contains(c.RefNumber)) select lc).GroupBy(c => c.RefNumber).ToDictionary(d => d.Key, d => d.ToList());

这将向您返回一个字典对象,其中 AAD 和 AAV 作为您的键,以及每个对象的结果,在一个强类型的 Cars 列表中。但是,如果您的数据不包含任何 AAV 行,您将获得一个包含一个键的字典 AAD,其中包含两个结果。


推荐阅读