как выполнить запрос соединения в этом сценарии - PullRequest
0 голосов
/ 04 ноября 2011

У меня есть три таблицы A, B, C. A, имеющие Id, Name, Address coulmns.B является общей таблицей, имеющей attributeID, aId, attributeName.где c - таблица сведений для B. со столбцами valueId, attributeId, aId Value.Сценарий есть.предположим, что A является таблицей Specific entity (скажем, Student).содержит только основные столбцы и значения.где как B есть дополнительные столбцы для студента Entity.(например, студент, возможно, изменил адрес, может иметь 3 мобильных номера)

    Table: A
    Aid      Name                   Address1 
    std1     Student                MG Street
    std2     Employee               Royal Street

    Table : B
    attributeId    aID            Value
    att1           std1          Address2
    att2           std1          ChangedAddress   
    att3           std1          Mobile1
    att4           std1          Mobile2

Table :C
 ValueId  attributeId    aID            Value

val1      att1           std1          Stefen colony  
val2      att2           std1          ChangedTo:Laurds
val3      att3           std1          87879797979798
val4      att4           std1          544559797979798


Note :Same for Employee 

Я хочу построить запрос, чтобы получить все значения c для std1 со значениями в таблице A. Но как-то структура dbдинамический, в смысле, столбцы для таблицы A хранятся в виде значений в таблице B, где значения в качестве атрибутов B хранятся в таблице C. Как написать запрос Linq для этого?

Ответы [ 2 ]

0 голосов
/ 26 ноября 2011

Не могли бы вы помочь нам, описав тип объекта, который вы хотите в своих результатах?

Хотите ли вы IEnumerable<A>, IEnumerable<A, IEnumerable<C>>?Если вы хотите первое, вы хотите, чтобы A содержал IEnumerable<C> или (что-то более экстремальное), содержащее непосредственно свойства, перечисленные в C, как если бы они были обычными свойствами A?пост имел плохое форматирование (я все еще новичок на этих форумах).Теперь должно быть понятнее.

0 голосов
/ 04 ноября 2011

Вы можете просто объединить записи, например:

class Student
{
    public int Id { get;set;}
}

class StudentPropertyDefintion
{
    public int Id { get; set; }
    public int StudentId { get; set; }
    public string PropertyName { get; set; }
}

class StudentPropertyValue
{
    public int PropertyDefinitionId { get; set; }
    public string PropertyValue { get; set; }
}

class Context
{
    public ISet<Student> Students { get; set; }
    public ISet<StudentPropertyDefintion> PropertyDefinitions { get; set; }
    public ISet<StudentPropertyValue> PropertyValues { get; set; }
}

// and query that

  Context context = new Context();

        var studentWithPropertiesQuery = from student in context.Students
                                         join propertyDefinition in context.PropertyDefinitions
                                         on student.Id equals propertyDefinition.StudentId
                                         join propertyValue in context.PropertyValues
                                         on propertyDefinition.Id equals propertyValue.PropertyDefinitionId
                                         select new
                                         {
                                             propertyValue,
                                             propertyDefinition,
                                             student
                                         };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...