winforms 使用组合框所选对象作为Entity Framework中参数进行查询

zzoitvuj  于 2022-11-17  发布在  其他
关注(0)|答案(1)|浏览(98)

在一个.NET Winforms应用程序中,我试图使用实体框架进行查询。我使用Db-Scaffold数据库首先从SQL Server创建了模型,在SQL Server中我创建了所有关系。
现在组合框cb 2将位置作为数据源。

public partial class Location
    {
        public Location()
        {
            AktiveSchichten = new HashSet<AktiveSchichten>();
        }
    public int Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<AktiveSchichten> AktiveSchichten { get; set; }
    
}

cb 2的SelectedValue保存了LocationId。现在我尝试在班次中获取位置等于SelectedValue位置的每个班次。

public partial class Shifts
{
    public int Id { get; set; }
    public TimeSpan Start { get; set; }
    public TimeSpan End { get; set; }
    public int Location { get; set; }

    public virtual Location LocationNavigation { get; set; }

}

}
我的方法

var shifts = dbContext.AktiveSchichten.Where(a => a.Location = cb2.SelectedValue);
        foreach (var shift in shifts)
        {
          //..
        }

为什么我不能用一个int来做这个

var shifts = dbContext.Shifts.Where(a => a.Location == (int)cb2.SelectedValue);

不抛出错误

vaj7vani

vaj7vani1#

您的 approach 语法不正确:在Where子句中有赋值
而不是比较
a.Location == cb2.SelectedValue
并且没有将cb2.SelectedValue转换为int(与工作语句var shifts =...相比)。
与jdweng的注解相反,只要强制转换有效(cb2.SelectedValue的类型为object,并且包含一个int),强制转换就可以与LINQ一起使用。但是最好在LINQ语句之前赋值:

var locationId = (int)cb2.SelectedValue;
var shifts = dbContext.Shifts.Where(a => a.Location == locationId);

此外:你的dbContext上真的有AktiveSchichtenShifts吗?也许你想合并你的命名(德语,英语;复数或单数表示类;不表示Shifts.Location类示例的属性的类名),以使代码更易于理解。

相关问题