0

鉴于下面的数据模型,我想选择每个具有 IsActive = true 的 Schedule 的 ConfigurableItem。

在此处输入图像描述

我已经查看了许多示例:关联表,并且由于示例以某种方式神奇地忽略了多对多关联,因此并没有真正得到它们中的任何一个。似乎有很多建议我应该能够:

var f = from citem in context.ConfigurableItems
        where citem.ConfigurableItemSchedules.Schedule.IsActive == true
        select citem;

但这不会智能感知/编译。我在这里想念什么?

更新:

我使用从服务器资源管理器(sql server)拖放自动生成的.dbml,所以下面是一些自动生成的代码,可能有助于回答一些评论。它们只是生成字段的截断片段。

public partial class ConfigurableItem : INotifyPropertyChanging, INotifyPropertyChanged
    {

        private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);

        private long _ConfigurableItemIndexCode;

        private string _ItemRootPath;

        private string _ItemName;

        private string _HandlerAssembly;

        private string _HandlerType;

        private EntitySet<ConfigurableItemProperty> _ConfigurableItemProperties;

        private EntitySet<ConfigurableItemSchedule> _ConfigurableItemSchedules;

……

public partial class ConfigurableItemSchedule : INotifyPropertyChanging, INotifyPropertyChanged
{

    private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);

    private long _ConfigurableItemIndexCode;

    private long _ScheduleIndexCode;

    private EntityRef<ConfigurableItem> _ConfigurableItem;

    private EntityRef<Schedule> _Schedule; 
4

2 回答 2

2

我认为你需要:

var f = from citem in context.ConfigurableItems
        where citem.ConfigurableItemSchedules.Any(s=>s.Schedule.IsActive)
        select citem;

或类似的东西。

于 2013-02-26T08:30:45.677 回答
1

您正在尝试访问 Schedule 但由于 ConfigurableItemSchedules 本身有很多行(我认为可能),编译器无法理解您需要哪一行的计划。当您在连接中使用导航属性时,您应该确保导航属性结束目标表中只有一行,或者您应该使用.SelectMany(t=>...).any()向编译器显示您将选择一组行,可能最好从最底部的表开始,例如

var c = (from u in  context.Schedule
                     where u.IsActive == true
                     select u.ConfigurableItemSchedules.ConfigurableItems);
于 2013-02-26T08:31:42.183 回答