自定义查询,用于在父实体中创建一个字段,该字段包含一组用于在WPF中绑定的子实体

本文关键字:字段 实体 用于 包含一 绑定 WPF 创建 查询 自定义 一个 | 更新日期: 2023-09-27 18:14:06

我正在尝试为包含子gridview数据源的gridview创建绑定源。我已经用以下方法尝试过了:

我有3个表:
患者:id(PK), fname, fname
研究:id(颗),study_id (PK), treatment_site, treatment_type,医生,放射剂量测试员
颗Study_Status: study_id (PK), 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 [Plan_Tracker.editPatient])'方法,并且此方法无法转换为存储表达式。"}

任何关于如何得到这个工作的指针将非常感激。存储在"epr"字段中的数据需要用户可编辑。

EDIT 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;

这是现在运行没有错误,但我还没有成功(尚未)使用epr作为数据源。我已经将它作为一列添加到数据网格中用于调试,并且它确实将其报告为System.Collections.Generic.List ' 1[Plan_Tracker]。editpatientResults],但这可能是因为声明变量,而不是因为数据。

自定义查询,用于在父实体中创建一个字段,该字段包含一组用于在WPF中绑定的子实体

我不确定原因,可能是Linq不喜欢树状结构?!?无论如何,上面的编辑文本是解决方案。我能够成功地创建自定义层次结构,并在父/子gridview中显示它。