.net WCF-按ID将所有行返回到XML

.net WCF-按ID将所有行返回到XML,.net,xml,wcf,entity-framework,.net,Xml,Wcf,Entity Framework,我是WCF新手,我只想返回Id与客户端提供的Id匹配的所有对象/记录。到目前为止,我只是让WCF一个接一个地返回对象。按照我的代码: 操作和数据契约: [ServiceContract] public interface IVdnLoginService { [OperationContract] VdnLoginDac GetVdnByLoginDac(string loginDac); } [DataContract] public class VdnLoginDac {

我是WCF新手,我只想返回Id与客户端提供的Id匹配的所有对象/记录。到目前为止,我只是让WCF一个接一个地返回对象。按照我的代码:

操作和数据契约:

[ServiceContract]
public interface IVdnLoginService
{
    [OperationContract]
    VdnLoginDac GetVdnByLoginDac(string loginDac);
}


[DataContract]
public class VdnLoginDac
{
    [DataMember]
    public int VdnLoginDacId { get; set; }
    [DataMember]
    public long VdnId { get; set; }
    [DataMember]
    public string VdnName { get; set; }
    [DataMember]
    public long EmployeeId { get; set; }
    [DataMember]
    public string LoginDacName { get; set; }
}
将EF模型转换为我的自定义模型的服务:

 public class VdnLoginService : IVdnLoginService
{
    public VdnLoginDac GetVdnByLoginDac(string loginDac)
    {
        Entities dbContext = new Entities();
        var VdnEntity = (from v 
                             in dbContext.LOGINVDNNAMES
                             where v.LOGIN == loginDac
                             select v).FirstOrDefault();
        if (VdnEntity != null)
        {
            return TranslateLoginVdnNamesEntityToVdnLogin(VdnEntity);
        }
        else
        {
            throw new Exception("Vdn invalido");
        }
    }

    private VdnLoginDac TranslateLoginVdnNamesEntityToVdnLogin(LOGINVDNNAMES LoginVdnNamesEntity)
    {
        VdnLoginDac vdnLoginDac = new VdnLoginDac();
        vdnLoginDac.VdnLoginDacId = LoginVdnNamesEntity.VDNEMPLOYEEID;
        vdnLoginDac.EmployeeId = LoginVdnNamesEntity.EMPLOYEEID;
        vdnLoginDac.LoginDacName = LoginVdnNamesEntity.LOGIN;
        vdnLoginDac.VdnId = LoginVdnNamesEntity.VDNID;
        vdnLoginDac.VdnName = LoginVdnNamesEntity.VDNNAME;

        return vdnLoginDac;

    }

}
我知道如果取消FirstOrDefault(),我将能够检索所有记录,但我不知道WCF将如何读取所有数据


答案和任何建议都将是非常宝贵的=)

您可以做两件事来使收藏能够返回

首先,将方法的返回类型从
VdnLoginDac
更改为
List
,以便可以返回匹配记录的列表

[ServiceContract]
public interface IVdnLoginService
{

    [OperationContract]
    List<VdnLoginDac> GetVdnByLoginDac(string loginDac);
}

请注意,没有检查
VdnEntity
是否为null或计数是否为0。客户端应该检查这一点,而不是让服务抛出异常。如果服务未处理该异常,则会导致服务关闭,客户端的通信通道将处于故障状态。

Tim,现在它正在工作!另外,您对异常的解释非常好!非常感谢你!
public List<VdnLoginDac> GetVdnByLoginDac(string loginDac)
{
    Entities dbContext = new Entities();
    var VdnEntity = (from v 
                         in dbContext.LOGINVDNNAMES
                         where v.LOGIN == loginDac
                         select new VdnLoginDac() {
                             VdnLoginDacId = v.VDNEMPLOYEEID,
                             EmployeeId = v.EMPLOYEEID,
                             LoginDacName = v.LOGIN,
                             VdnId = v.VDNID,
                             VdnName = v.VDNNAME
                         }).ToList();

    return VdnEntity;
}