次の表を検討してください。
TblDocument
docID, levelID, name
101, 201, AAA
102, 201, BBB
103, 201, CCC
104, 202, DDD
105, 202, EEE
TblPage
pgID, docID, pgNo
1, 101, 1
2, 102, 1
3, 102, 2
4, 103, 1
5, 104, 1
6, 105, 1
TblFieldName
fieldNameID, levelID, fieldName
1, 201, WrittenBy
2, 201, VerifiedBy
3, 201, DocumentName
TblFieldValue
docID, fieldNameID, fieldValue
101, 1, James
101, 2, Bond
101, 3, Essay on something
102, 1, Krister
102, 2, Holm
102, 3, Dame it or not!
public class Document
{
public int DocID {get; set;}
public int LevelID {get; set;}
public string Name {get; set;}
public List<Field> Metadata
{
get { return (_fields); }
set { _fields = value; }
}
private List<Field> _fields = new List<Field>();
}
public class Field
{
public FieldNameID {get; set;}
public FieldName {get; set;}
public FieldValue {get; set;}
}
今、私は正常に動作するlinqを使用してデータベースからデータをフェッチしようとしています。
using (DBDataContext context = new DBDataContext())
{
List<Document> doc = (from d in context.TblDocuments
join p in context.TblPages on d.docID equals p.docID into dpgrp
from dp in dpgrp.Where(f => f.docID == d.docID).DefaultIfEmpty()
where d.levelID == 201
select new Document
{
DocumentID = d.docID,
LevelID = d.levID
}).ToList<Document>();
}
誰かがリストのフィールド値を取得する方法を教えてもらえますか?
using (DBDataContext context = new DBDataContext())
{
List<Document> doc = (from d in context.TblDocuments
join p in context.TblPages on d.docID equals p.docID into dpgrp
from dp in dpgrp.Where(f => f.docID == d.docID).DefaultIfEmpty()
where d.levID == 201
select new Document
{
DocumentID = d.docID,
LevelID = d.levID
Metadata = ??????? // how to achieve this? as it is a list
}).ToList<Document>();
}