转换/转换ISingleResult - 在没有循环的情况下将值列出到我的类

时间:2011-02-11 17:36:47

标签: c#

我有一个像这样的DataContract:

[Serializable]
[DataContract]
public class Employee: IEmployee
{
    public Employee();

    [DataMember]
    public string EmpID { get; set; }
    [DataMember]
    public List<EmpSalaryDetail> EmpSalaryDetails { get; set; }
    [DataMember]
    public List<EmpPersonalDetail> EmpPersonalDetails { get; set; }
}
[DataContract]
public class EmpSalaryDetail: IEmpSalaryDetail
{
    public EmpSalaryDetail();

    [DataMember]
    public string EmpID { get; set; }
    [DataMember]
    public int GrossSal { get; set; }
}
public class EmpPersonalDetail: IEmpPersonalDetail
{
    public EmpPersonalDetail();

    [DataMember]
    public string EmpID { get; set; }
    [DataMember]
    public string EmpName { get; set; }
}

我在我的c#app中使用Linq to Sql,它创建了以下代码:

[global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.GetEmployeeDetails")]
public ISingleResult<GetEmployeeDetailsResult> GetEmployeeDetails([global::System.Data.Linq.Mapping.ParameterAttribute(Name="EmpId", DbType="NVarChar(32)")] string empID)
{
IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)   
(MethodInfo.GetCurrentMethod())), empID);
return ((ISingleResult<GetEmployeeDetailsResult>)(result.ReturnValue));
}

我正在将GetEmployeeDetailsResult的结果转换为List,我得到的结果如下:

EmpID GrossSal EmpName

a11 3560 raj

a12 9760 kumar

a13 5670 selva

a14 3080 joe

a15 8900 fra

a16 5500 ravi

a17 7000 mani

我想将此平面列表映射回Employee类的对象。我不想遍历List并为每个类创建对象。

还有其他方法,例如再次编写linq查询或其他任何非常聪明的查询。

请给你建议。

1 个答案:

答案 0 :(得分:1)

这样的事情应该可以解决问题。您没有向我们提供GetEmployeeDetailsResult的定义,因此根据Convert.ToInt32GetEmployeeDetailsResult.EmpID的类型,您可能需要调用GetEmployeeDetailsResult.GrossSal来调用:

var employees = 
    result.Select(x => new Employee {
        EmpID = x.EmpID,
        EmpSalaryDetails = new List<EmpSalaryDetail> {
            new EmpSalaryDetail { 
                EmpID = x.EmpID,
                GrossSal = x.GrossSal
            }
        },
        EmpPersonalDetails = new List<EmpPersonalDetail> {
            new EmpPersonalDetail {
                EmpID = x.EmpID,
               EmpName = x.EmpName
            }
        }
    );