这是我的数据库架构。
Delivery(LRno(PK), Destination, date, TransporterID(FK), Weight, TruckNo)
Transporter(TransporterID(PK), TransporterName)
现在我在 UI 中有以下控件:
LRNo, Destination, Date, Weight, TransporterName.
当用户提供输入作为运输者名称时,我想在交付表中插入 TransporterID(FK)。用户应该选择运输者名称,而 TransporterID 应该插入到交付表中。 Transporter 表中未进行任何更改。
我们正在使用 linq to entities。我是 EF 和 LINQ 的新手。
rDatabaseEntities context = new rDatabaseEntities();
Delivery del = new Delivery();
del.TruckNo = trucknotxt.Text;
del.LR_No = Convert.ToInt32(lrnotxt.Text);
var query = from t in context.Transporters where t.transporterName == transcombo.SelectedItem select t.TransporterID;
context.Deliveries.AddObject(query);
transcombo 是选择转运器名称的组合框。
最后一行出现两个错误 (context.Deliveries.AddObject(query);)
1) The best overloaded method match for 'System.Data.Objects.ObjectSet<linqproj.Delivery>.AddObject(linqproj.Delivery)' has some invalid arguments
2) Argument 1: cannot convert from 'System.Linq.IQueryable<int>' to 'linqproj.Delivery
接下来要做什么?
最佳答案
问题是“查询”是一个 int 值的集合,包含满足条件的所有传输器的 ID。在你的情况下,我猜不应该有两个同名的转运器,所以取第一个结果,如果没有同名的转运器,则取 null。此外,您还需要将该运输商分配给交付并将交付添加到上下文中,而不是运输商。
rDatabaseEntities context = new rDatabaseEntities();
Delivery del = new Delivery();
del.TruckNo = trucknotxt.Text;
del.LR_No = Convert.ToInt32(lrnotxt.Text);
Transporter transporter = (from t in context.Transporters where t.transporterName == transcombo.SelectedItem select t).FirstOrDefault();
if(transporter != null)
{
del.Transporter = transporter;
}
context.Deliveries.AddObject(del);
关于c# - 如何使用 linq 向关系表中的实体添加数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29211475/