Joseph
Joseph

Reputation: 1

converting/Casting ISingleResult - List values to my class without Looping

I have a DataContract like this:

[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; }
}

And I'm using Linq to Sql in my c# app which creates the below code:

[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));
}

I'm converting GetEmployeeDetailsResult the result to a List and I'm getting something like this:

EmpID GrossSal EmpName

a11 3560 raj

a12 9760 kumar

a13 5670 selva

a14 3080 joe

a15 8900 fra

a16 5500 ravi

a17 7000 mani

I want to map this flat List back to an object of Employee class. I don't want to loop through the List and create object for each class.

Is there any other way like writing a linq query again or anything else really smart.

Please give you suggestions.

Upvotes: 0

Views: 3216

Answers (1)

jason
jason

Reputation: 241731

Something like this should do the trick. You didn't give us the definition for GetEmployeeDetailsResult, so you might have to throw in some calls to Convert.ToInt32 depending on the types of GetEmployeeDetailsResult.EmpID and 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
            }
        }
    );

Upvotes: 1

Related Questions