【问题标题】:How to convert Generic.List values into extension method如何将 Generic.List 值转换为扩展方法
【发布时间】:2017-06-22 16:02:02
【问题描述】:

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

现在的问题是 DataSourcesModelDTO dto 只存储一个行值。 我期望它应该存储多行值。如何在 extension 方法中实现这一点?

** 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; }

    }

【问题讨论】:

  • 你丢失了:DataRow newRow = dto.Rows.Add(); newRow.DataSourceConfigID = model.DataSourceConfigID.ToString();
  • 不,我这里没有使用 dataTable。我已经添加了我的 DTO 类。

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


【解决方案1】:
foreach (var model in model1)
{

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

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

  • 接收单个 DataSourcesModel 对象并返回单个 DataSourcesModelDTO 对象(从循环或 Linq 查询中调用该方法),或者
  • 接收IEnumerable&lt;DataSourcesModel&gt; 并返回IEnumerable&lt;DataSourcesModelDTO&gt;

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

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

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

我会让你弄清楚具体的实现方式。提示:您可以在方法中创建一个List&lt;DataSourcesModelDTO&gt;,并像现在一样用新对象填充它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-06
    相关资源
    最近更新 更多