我有三张桌子A,B,C。有一个ID,名字,地址coulmns。 B是具有attributeID,aId,attributeName的通用表。其中,c是B.的详细信息表,其中包含列valueId,attributeId,aId Value。 情景是。假设A是特定实体表(比如学生)。仅包含基本列和值。其中B是实体学生的额外列。 (例如,学生可能已更改地址,可能有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
我想构建查询以获取std1中c的所有值以及表A中的值。但不知何故db结构是动态的,因此表A的coulmns存储为表B中的值,其中作为值对于存储在表C中的B属性。如何为此编写Linq查询?
答案 0 :(得分:0)
您可以简单地将记录加在一起,如:
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
};
答案 1 :(得分:0)
您能否通过描述结果中所需的对象类型来帮助我们?
您想要IEnumerable<A>
,IEnumerable<A, IEnumerable<C>>
吗?
如果你想要第一个,你想要A包含一个IEnumerable<C>
或(更极端的东西)直接包含C中列出的属性,就像它们是A的正常属性一样吗?