1

テーブル「StaffSectionInCharge」からすべての ID を取得する必要があります。これには、StaffId と SectionId の 2 つの列しかありません。値は StaffId と StudentId です。問題は、このテーブルに直接レコードを取得できないことです。 .....エンティティ フレームワークを使用しており、このテーブルの設計は

[EdmRelationshipNavigationPropertyAttribute("Model", "StaffSectionInCharge", "Section")]
    public EntityCollection<Section> Sections
    {
        get
        {
            return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedCollection<Section>("Model.StaffSectionInCharge", "Section");
        }
        set
        {
            if ((value != null))
            {
                ((IEntityWithRelationships)this).RelationshipManager.InitializeRelatedCollection<Section>("Model.StaffSectionInCharge", "Section", value);
            }
        }
    }

次のようにスタッフテーブルからこのテーブルにアクセスできます

Staff staff = buDataEntities.Staffs.First(s => s.StaffId == StaffId);
Section section = buDataEntities.Sections.First(s => s.SectionId == SectionId);

staff.Sections.Add(section);
buDataEntities.savechanges();

このように、この StaffSectionInCharge テーブルにレコードを追加できます....

ここで、対応する SectionId のすべての StaffId を取得したい

みたいになってみた

DataAccess.Staff staffs = new DataAccess.Staff();

foreach (int staff in staffs.Sections.Select(s=>s.SectionId))
            { 

            }

しかし、うまくいきません。誰か助けてください

4

1 に答える 1

1
var staffIds = buDataEntities.Staffs
    .Where(st => st.Sections.Any(se => se.SectionId == SectionId))
    .Select(st => st.StaffId)
    .ToList();

また

var staffIds = buDataEntities.Sections
    .Where(se => se.SectionId == SectionId)
    .SelectMany(se => se.Staffs.Select(st => st.StaffId))
    .Distinct()
    .ToList();

両方のオプションが機能するはずです。SectionIdが主キーの場合Section、2番目のコードを次のように簡略化できます。

var staffIds = buDataEntities.Sections
    .Where(se => se.SectionId == SectionId)
    .Select(se => se.Staffs.Select(st => st.StaffId))
    .SingleOrDefault();
于 2012-04-17T12:40:28.843 に答える