我正在尝试为gridview创建一个绑定源,其中包含子gridview的数据源。我是按照以下方式尝试的:
我有3张桌子:
患者:id(PK),fname,fname
研究:id(FK),study_id(PK),treatment_site,treatment_type,physician,dosimetrist
Study_Status:study_id(PK,FK),hasContours,hasPlan,的isReady
我有以下型号:
public class myPatient
{
public string fname { get; set; }
public string lname { get; set; }
public bool hascontours { get; set; }
public bool hasplan { get; set; }
public bool isready { get; set; }
public IEnumerable<editPatient> epr{ get; set; }
}
public class editPatient
{
public string fname { get; set; }
public string lname { get; set; }
public string txsite { get; set; }
public string txtype { get; set; }
public string physician { get; set; }
public string dosimetrist { get; set; }
}
public class myPatientList : List<myPatient>
{
public myPatientsList()
{
AddRange(getMyPatients().ToList());
}
public IEnumerable<myPatient> getMyPatients()
{
Connection plan_trackerEM = new Connection();
return from np in plan_trackerEM.patients
join ns in plan_trackerEM.studies on np.ID equals ns.Id
join nss in plan_trackerEM.study_status on ns.study_id equals nss.study_id
where ns.dosimetrist == App.userClass.user_id || ns.physician == App.userClass.user_id)
select new myPatient()
{
fname = np.fname,
lname = np.lname,
hascontours = nss.hasContours,
hasplan = nss.hasPlan,
isready = nss.isReady,
epr = getEditPatients(ns.study_id).ToList()
};
}
public IEnumerable<editPatient> getEditPatients(long study_id)
{
Connection plan_trackerEM = new Connection();
return from np in plan_trackerEM.patients
join ns in plan_trackerEM.studies on np.ID equals ns.Id
where ns.study_id == study_id
select new editPatient()
{
fname = np.fname,
lname = np.lname,
txsite = ns.treatment_site,
txtype = ns.treatment_type,
physician = ns.physician,
dosimetrist = ns.dosimetrist
};
}
}
然后我使用XML
绑定数据<local:myPatientsList x:Key="mPL"/>
<CollectionViewSource x:Key="MP" Source="{StaticResource mPL}"/>
<CollectionViewSource x:Key="EP" Source="{Binding epr, Source={StaticResource MP}}"/>
这个错误与:{“LINQ to Entities无法识别方法'System.Collections.Generic.List 1[Plan_Tracker.editPatient] ToList[editPatient](System.Collections.Generic.IEnumerable
1 [Plan_Tracker.editPatient])'方法,并且此方法无法转换为商店表达。“}
任何有关如何使其工作的指示将不胜感激。将存储在“epr”字段中的数据需要由用户编辑。
编辑2013-05-21
好吧,我可能会接近一个非常奇怪的工作。
我删除了
epr = getEditPatients(ns.study_id).ToList()
从查询结果中,然后在查询结果后添加:
List<mypatientResults> new_tmp_mp = new List<mypatientResults>();
foreach (mypatientResults tmp_mp in _mp)
{
tmp_mp.epr = getEditPatients(tmp_mp.sid).ToList();
new_tmp_mp.Add(tmp_mp);
}
return new_tmp_mp;
现在这是没有错误的runnign,但我没有成功(YET)使用epr作为数据源。我已将其作为列添加到数据网格以进行调试,并将其报告为System.Collections.Generic.List`1 [Plan_Tracker.editpatientResults],但这可能来自声明变量而不是因为数据。<登记/>
我仍然在这里过头,可以帮助解决这个问题。
答案 0 :(得分:0)
我不确定推理,Linq可能不喜欢树状结构?!?无论上面编辑的文本是解决方案。我能够成功创建自定义层次结构并在父/子gridview中显示它。