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

标签 c# wpf linq entity-framework linq-to-entities

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/

相关文章:

c# - 如何让 C# 显示阿拉伯语?

c# - 组织邮政地址元素

c# - 如何从单击的 ToolStripDropDownButton 项中获取字符串?

.net - WPF 绑定(bind)中的默认值

c# - 无法获取 RowUpdate 事件处理程序以显示 GridView 的错误

c# - 在 MVVM 之后从 WPF 中的组框确定选中的单选按钮

c# - 强制 TextBox 刷新

c# - 使用已编译的 Lambda 表达式而不是 Activator.CreateInstance 来初始化 SoapHttpClientProtocol 对象

sql - 动态更改 LINQ to Entity 查询

c# - 从数据库中过滤 MVC SelectList