我有一个名为“motor_list”的整数列表 = 2, 3, 5, 3, 8, 5, 5, 9, 8(列表 2)
(3 = 2 times in the list)
(5 = 3 times)
我有一个表(项目),其中内容行“ItemId、Name、Date、Location”,它只有内容 2 个数据:
(ItemId) = 3 and 5. (List 1)
var data = _context.Item.Where(x => motor_list.Contains(x.ItemId));
使用上面的代码,我只得到两个数据,这在技术上显然是正确的,
现在我想获取数据但是根据motor_list(列表2)的出现, Item 表中没有。
我的意思是我想得到类似的东西:
ItemId 3 should pull 2 times the same data, and
ItemId 5 should pull 3 times.
答案 0 :(得分:2)
试试这个代码
List<int> list1 = new List<int>() { 3, 5 };
List<int> list2 = new List<int>() { 2, 3, 5, 3, 8, 5, 5, 9, 8 };
var data = list2.GroupBy(x => x).Where(a => list1.Contains(a.Key));
var result= data.Select(g => $"ItemId {g.Key} should pull {g.Count()} times").ToList();
foreach (var item in result)
{
Console.WriteLine(item);
}
答案 1 :(得分:1)
使用 join 准确返回 motor_list
中的项目。
var data = motor_list
.Join(_context.Item,
left => left,
right => right.ItemId,
(left, right) => new { items = right });
或者稍微远一点
var data = _context.Item.ToList();
var result = lst.Select(x => new
{
item = data.Where(a => a.ID == x).FirstOrDefault()
}).Where(a=>a.item != null).ToList();
答案 2 :(得分:1)
我不确定您所说的“ItemId 3 应该提取 2 倍相同的数据”是什么意思。听起来您要么想要 motor_list 中每个 ItemId 的计数,要么想要结果中返回重复项。
您可以通过以下方式实现:
class Item
{
public int ItemId { get; set; }
}
static void Main(string[] args)
{
List<Item> contextItems = new List<Item> { new Item { ItemId = 3 }, new Item { ItemId = 5 } };
var motor_list = new List<int> { 2, 3, 5, 3, 8, 5, 5, 9, 8 };
// To get the count of each contextItem in motor_list:
var itemCount = contextItems
.Select(contextItem =>
motor_list.Count(motorId => motorId == contextItem.ItemId))
.ToList();
// result: { 2, 3 }
// To get duplicate items for each contextItem in motor_list
var items = motor_list
.Where(motorId =>
contextItems.Any(contextItem => contextItem.ItemId == motorId))
.ToList();
// result: { 3, 5, 3, 5, 5 }
}