如何使用不是主键的密钥获取结果列表?更具体地说,我有一个复合主键,我想用一列的参数检索所有匹配。
我认为,在Controller的ActionResult中,它就像
tableModel tbmodel = db.tableModels.Find(i => i.partialPK == parameter)
但事实并非如此,因为Find()仅适用于整个PK。
我在实体模型类中将我的PK声明为:
[Key]
[Column(Order = 0)]
public int PK1 { get; set; }
[Key]
[Column(Order = 1)]
public string PK2 { get; set; }
答案 0 :(得分:7)
根据DbSet.Find,您可以传入以逗号分隔的主键
db.tableModels.Find(PK1, PK2)
Find方法将对象数组作为参数。使用复合主键时,传递以逗号分隔的键值,其顺序与模型中定义的顺序相同。
但是,如果您只想使用一个值,则可能需要使用
db.tableModels.Where(i => i.partialPK == parameter)
或等效的Linq运算符
答案 1 :(得分:0)
如果您尝试从数据库中使用linq查询获取对象,请使用:.FirstOrDefault
和.Where
Customer customer = db.Customers.Where(c => c.Email == auth.Email).FirstOrDefault();
这里db
是DbContext
而Customer
是DbSet