如何将Generic.List值转换为扩展方法

时间:2017-06-22 16:02:02

标签: c# linq-to-entities extension-methods generic-list

我正在使用Linq to Entity,Linq查询返回 ToList ()并在 DataSourcesModel 类中存储多行。后来我使用foreach来迭代项目并在 DataSourcesModelDTO 中存储值,直到这里工作正常。

现在问题是 DataSourcesModelDTO dto 只存储一个行值。 我期待它应该存储多行值。如何在 扩展程序 方法中实现此目的?

** var datasoruceModeltDTO = DataSourcesDTOTransformers.ToDTO(result); **

public static class DataSourcesDTOTransformers
    {
        public static DataSourcesModelDTO ToDTO(this List<DataSourcesModel> model)
        {
            if (model == null) { return null; }
            var dto = new DataSourcesModelDTO();
            ToDTO(model, dto);
            return dto;
        }
        public static void ToDTO(List<DataSourcesModel> model1, DataSourcesModelDTO dto)
        {
            foreach (var model in model1)
            {

                dto.DataSourceConfigID = model.DataSourceConfigID.ToString();
                dto.DataSourceID = model.DataSourceID.ToString();
                dto.Name = model.Name;
                dto.server = model.server;
                dto.LastModified = model.LastModified;
                dto.Instance = model.Instance;
            }


        }
    }



[DataContract]
    public class DataSourcesModelDTO
    {
        [DataMember]
        public string DataSourceID { get; set; }

        [DataMember]
        public string DataSourceConfigID { get; set; }

        [DataMember]
        public string Name { get; set; }

        [DataMember]
        public string server { get; set; }

        [DataMember]
        public string Instance { get; set; }

        [DataMember]
        public bool Deleted { get; set; }

        [DataMember]
        public DateTime LastModified { get; set; }

        [DataMember]
        public DateTime LastSync { get; set; }

    }

1 个答案:

答案 0 :(得分:1)

foreach (var model in model1)
{

    dto.DataSourceConfigID = model.DataSourceConfigID.ToString();

每次在循环中设置相同dto对象的属性。我会将您的toDTO方法重新排列为:

  • 接受一个DataSourcesModel对象并返回一个DataSourcesModelDTO对象(从循环或Linq查询中调用该方法),或
  • 接收IEnumerable<DataSourcesModel>并返回IEnumerable<DataSourcesModelDTO>
  

如何在扩展方法中实现这一点?

不确定为什么需要扩展方法,但相应的签名是:

public static IEnumerable<DataSourcesModelDTO> ToDTOCollection (this IEnumerable<DataSourcesModel> model)

我会让你弄清楚实现的内容。提示:您可以在方法中创建List<DataSourcesModelDTO>,并使用与现在相同的方式使用新对象填充它。