我有一个像这样的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查询或其他任何非常聪明的查询。
请给你建议。
答案 0 :(得分:1)
这样的事情应该可以解决问题。您没有向我们提供GetEmployeeDetailsResult
的定义,因此根据Convert.ToInt32
和GetEmployeeDetailsResult.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
}
}
);