【发布时间】:2011-02-11 17:36:47
【问题描述】:
我有一个这样的 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# 应用程序中使用 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 的结果转换为一个列表,我得到这样的结果:
EmpID GrossSal EmpName
a11 3560 拉吉
a12 9760 库马尔
a13 5670 塞尔瓦
a14 3080 乔
a15 8900 帧
a16 5500 拉维
a17 7000 曼尼
我想将此平面列表映射回 Employee 类的对象。我不想遍历列表并为每个类创建对象。
有没有其他方法,比如再次编写 linq 查询或其他真正聪明的方法。
请给你建议。
【问题讨论】:
-
仅供参考,循环遍历列表并创建对象正是 linq 解决方案所要做的。
-
@asawyer:但是 LINQ 的重点是让代码更具声明性和更少的命令性,这样我们就可以说“将此列表投影到
Employee的列表中;我不在乎你如何做吧,做吧。” LINQ 让我们摆脱了无助于表达代码意图的顾虑。 -
@Jason 我理解并同意,只是向 OP 指出。
-
@jeffamaphone:另一个问题是这个问题的重复;这个是按时间顺序排在第一位的。
标签: c#