select 仅来自 table 的复合键的最佳方法

Best way to select only the composite keys from a table

我有一个名为 products 的 table,它具有 LineId 和 SizeId 的复合键。 我只想 select 这些值。但每当我这样做时,我总是会遇到错误。 例如:

    return _dbset.Select(x => new KeyValuePair(x.LineId, x.SizeId));

我收到错误

cannot create a constant value of type keyvaluepair only primitive types or enumeration types are supported in this context

即使我在 selecting 之前 .ToList() 它也会发生这种情况。 我试过使用字典,但它是一个复合键,它认为有重复项。

我想要它,所以当创建查询时,它只要求输入键而不是任何其他字段,因为我需要快速查询。

您无法创建 KeyValuePair 实例,因为没有可用的无参数构造函数。如果你只想 return 复合键值然后创建一个简单的 class 来保存 ID 和类型并使用这个:

return _dbset.Select(x => new CompositeIdClass
{ LineId = x.LineId, SizeId = x.SizeId });

在使用 Select 的 Linq 投影中,您可以使用匿名类型,或使用默认构造函数和 getter-setter 的自定义 class。鉴于您想要 return 该数据,然后自定义 class。您不能在 classes 上使用构造函数,因为 EF 无法将其转换为 SQL。

return _dbset.Select(x => new LineSizeKey { x.LineId, x.SizeId }).ToList(); 

其中 LineSizeKey 是一个 POCO class 具有两个属性 /w Getters & Setters。

怎么样

return _dbset.Select(x => new {LineId = x.LineId,SizeId = x.SizeId}).ToList();

此查询将仅 select LineIdSizeId 列,您将得到 List<T>,其中 TAnonymous Type {int LineId,int SizeId}

您可以 select 复合列的键值对。下面的代码段是 select 来自 table 的复合列。

return _dbset.Select(x => new KeyValuePair<decimal,decimal>(x.LineId, x.SizeId))

enter image description here