如何使用LINQ填充对象的属性并返回集合

时间:2018-12-19 16:37:13

标签: c# linq lambda

我的文件中有这样的行: 05122018; surname1; ItemName1; Price1

和OrderModel

public class OrderModel
    {
        public string ManagerSurname { get; set; }
        public DateTime Date { get; set; }
        public string CustomerSurname { get; set; }
        public string ItemName { get; set; }
        public double Price { get; set; }

    }

如何发出LINQ请求以返回OrderModel的集合?

public IEnumerable<OrderModel> Parse(string[] input)
        {
            return
                (input ?? throw new ArgumentNullException(nameof(input)))
                .Select(orderModel => new OrderModel()
                {
                   //filling objects
                }).Where(orderModel => //Any);

3 个答案:

答案 0 :(得分:1)

基本上,您似乎想要deserialize从分号分隔到对象的字符串进入。这是serialize / deserialize数据的一种非常丑陋且可能脆弱的方式,如果您可以更改它(更改为JSONXML或其他方式),则可能是一个好主意。

但是您可以为您的OrderModel类创建一个构造函数,该构造函数将序列化的字符串作为参数并在其中反序列化:

public OrderModel(string inOrderModel){
    var splitString = inOrderModel.Split(';');
    ManagerSurname = splitString[1];
    // etc
}

然后您可以使用LINQ从传入数组创建列表:

return input.Select(i => new OrderModel(i));

答案 1 :(得分:0)

简单地返回return _context.OrderModel将从上下文中返回整个OrderModel:

public IEnumerable<OrderModel> Parse(string[] input)
{

(input ?? throw new ArgumentNullException(nameof(input)))

            return _context.OrderModel;
}

或假设您想按输入字符串数组中的数据过滤数据集,则可以使用input.contains(model.field)进行过滤。示例根据输入的字符串数组过滤项目名称:

public IEnumerable<OrderModel> Parse(string[] input)
    {

    (input ?? throw new ArgumentNullException(nameof(input)))

                return _context.OrderModel.Where(m => input.contains(m.ItemName));
    }

答案 2 :(得分:0)

考虑到input[]数组由一行组成

  

05122018; surname1; ItemName1; Price1

每个条目的

和每行具有相同的项目顺序。您可以在选择中进行拆分,以获取适当的值:

public IEnumerable<OrderModel> Parse(string[] input)
{
    return
        (input ?? throw new ArgumentNullException(nameof(input)))
        .Select(orderModel =>
        {
            var items = orderModel.Split(";");
            if (items.Length != 4)
            {
                throw new ArgumentException();
            }

            return new OrderModel()
            {
                //filling objects
                ManagerSurname = items[1],
                ItemName = items[2],
                ...
            };
        }).Where(orderModel =>  //Any);
}