C# 在不循环的情况下将ISingleResult-列表值转换/强制转换为my class

C# 在不循环的情况下将ISingleResult-列表值转换/强制转换为my class,c#,C#,我有这样的数据合同: [Serializable] [DataContract] public class Employee: IEmployee { public Employee(); [DataMember] public string EmpID { get; set; } [DataMember] public List<EmpSalaryDetail> EmpSalaryDetails { get; set; } [Dat

我有这样的数据合同:

[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结果转换为一个列表,得到如下结果:

[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; }
}
格洛萨尔皇帝

A113560拉吉

A129760库马尔

a13 5670塞尔瓦

A143080乔

a15 8900 fra

A165500拉维

a17 7000马尼

我想将这个平面列表映射回Employee类的对象。我不想在列表中循环并为每个类创建对象

有没有其他方法像再次编写linq查询或其他真正聪明的方法


请给你一些建议。

像这样的建议应该可以奏效。您没有为我们提供GetEmployeeDetailsResult的定义,因此您可能需要根据GetEmployeeDetailsResult.EmpID和GetEmployeeDetailsResult.grossal的类型插入一些转换.ToInt32的调用:


仅供参考,在列表中循环并创建对象正是linq解决方案所要做的。@asawyer:但linq的目的是使代码更具声明性,更少必要性,这样我们就可以说将此列表投影到员工列表中;我不管你怎么做,只要做就行了。LINQ将我们从无助于表达代码意图的担忧中解放出来。@Jason我理解并同意,只是向OP指出了它。可能重复的@jeffamaphone:另一个问题是这个问题的重复;这张是按时间顺序排在第一位的。谢谢你的建议。我试过了,但员工似乎是空的。怎么处理?@Joseph:如果结果不为空,员工也不为空。放心。当然,如果结果为null,上面的内容无论如何都会爆炸。我得到了这个错误……无法将类型为“WhereSelectListIterator`2[ExternalInterface.GetEmployeeDetailsResult,CommonDataContracts.Employee]”的对象强制转换为类型为“CommonDataContracts.Employee”。@Joseph:这与说它为null非常不同。请注意,雇员不是雇员。这是一个员工序列。尝试将一系列员工转换为一名员工是没有意义的。你能将所有与你共事的员工按字母顺序排列的列表转换为公司中的一名员工吗?我给了你一个错误的示例,因此我提出了一个新的提问-将IsingResult列表值转换为我的类,而不使用正确的示例循环。如果你有任何想法,请告诉我。谢谢