我的文件中有这样的行: 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);
答案 0 :(得分:1)
基本上,您似乎想要deserialize
从分号分隔到对象的字符串进入。这是serialize
/ deserialize
数据的一种非常丑陋且可能脆弱的方式,如果您可以更改它(更改为JSON
或XML
或其他方式),则可能是一个好主意。
但是您可以为您的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);
}