gpt4 book ai didi

c# - 如何使用 linq 向关系表中的实体添加数据?

转载 作者:太空宇宙 更新时间:2023-11-03 15:43:41 24 4
gpt4 key购买 nike

Similar question here

这是我的数据库架构。

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com