Linq查询的返回类型从数据访问层加入两个表

时间:2015-02-21 13:47:47

标签: c# jquery linq data-access-layer

我正在开发一个3层应用程序,在数据访问层(DAL)上,我运行查询并像这样返回

public TRAIN getTrainingRecord(int id)
{
        TRAIN ret = null;
        try
        {
            integradboDataContext db = new integradboDataContext(_connectionstring);
            var query = (from us in db.TRAINs
                         where us.id == id select us).FirstOrDefault();
            ret = query;
        }
        catch (Exception ex) { misc.logerror(ex.Message, ex.StackTrace, ex.Source); }
        return ret;
}

然后在业务层(BL)

上使用它
public TrainingRecordFields getTrainingRecord(int id)
{
        TrainingRecordFields ret = null;
        try
        {
            var query_raw = data.getTrainingRecord(id);
            var query = new TrainingRecordFields();
            {
                query.id = Convert.ToInt32(query_raw.id);
                query.staffNo = query_raw.STAFFNO;
                query.courseTitle = query_raw.TITLE;
                query.dateStarted = query_raw.MDATE1.ToString();
                query.dateEnded = query_raw.MDATE2.ToString();
                query.organizers = query_raw.ORGANISE;
                query.venue = query_raw.VENUE;
            };
            ret = query;
        }
        catch (Exception ex) { misc.logerror(ex.Message, ex.StackTrace, ex.Source); }
        return ret;
}

班级名称TrainingRecordFields只是一个POCO班级。

现在,我需要将另一个表连接到查询,以便我可以检索另外两个字段。查询应该如下所示

(from us in db.TRAINs
 join st in db.STFREGs on us.STAFFNO equals st.STAFFNO
 where us.id == id select us).FirstOrDefault();

在这种情况下,类TRAIN不再是适当的返回类型,因为它没有我需要的另一个表STFREGs中的两个字段。

这样做的标准C#方式是什么?

1 个答案:

答案 0 :(得分:1)

只需将两个属性添加为POCO的扩展名即可。您可以在相同的C#类文件或类的扩展名中执行此操作。所以,例如:

// TrainingRecordFields file
public partial class TrainingRecordFields
{
    ...
}

// TrainingRecordFieldsExt file
public partial class TrainingRecordFields
{
    ...
}

我喜欢这种方法,因为它可以让你跟踪从连接中获得的扩展属性。