C# 仅从表中选择组合键的最佳方法

C# 仅从表中选择组合键的最佳方法,c#,entity-framework,linq-to-sql,C#,Entity Framework,Linq To Sql,我有一个名为products的表,它的复合键是LineId和SizeId。 我只想选择这些值。但每当我这样做的时候,我总是会遇到一个错误。 例如: return _dbset.Selectx=>newkeyvaluepairx.LineId,x.SizeId; 我得到了错误 无法创建keyvaluepair类型的常量值 在此上下文中仅支持基元类型或枚举类型 即使我在选择之前列出它,也会发生这种情况。 我尝试过使用字典,但由于它是一个复合键,它认为有重复项 我希望这样,当创建查询时,它只要求键,而

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

return _dbset.Selectx=>newkeyvaluepairx.LineId,x.SizeId; 我得到了错误

无法创建keyvaluepair类型的常量值 在此上下文中仅支持基元类型或枚举类型

即使我在选择之前列出它,也会发生这种情况。 我尝试过使用字典,但由于它是一个复合键,它认为有重复项

我希望这样,当创建查询时,它只要求键,而不要求任何其他字段,因为我需要快速查询。

您不能创建KeyValuePair实例,因为没有无参数构造函数可用。如果只想返回复合键值,请创建一个简单类来保存ID和类型,并使用以下方法:

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

在带有Select的Linq投影中,您可以使用匿名类型,或者使用带有默认构造函数和getter setter的自定义类。如果您希望返回该数据,则使用自定义类。您不能在类上使用构造函数,因为EF无法将其转换为SQL

return _dbset.Select(x => new LineSizeKey { x.LineId, x.SizeId }).ToList(); 
其中LineSizeKey是一个具有两个属性的POCO类/w getter和setter。

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

此查询将仅选择LineId和SizeId列,您将得到一个列表,其中T是{int LineId,int SizeId}的匿名类型

您可以选择组合列的键值对。下面的代码段用于从表中选择复合列

return _dbset.Selectx=>new KeyValuePairx.LineId,x.SizeId
您好,欢迎来到stackoverflow,请注意,不允许发布姓名、电子邮件、地址等个人详细信息。。。请看这个