Linq查询没有列名

时间:2019-03-07 10:09:21

标签: c# linq asp.net-core

我试图通过使用检索到的列表上的Select OR Where子句编写LINQ查询。但是,列表没有列名,只有值存在。 所以我的问题是如何根据此条件获取值?

例如该列表包含“已批准”,“保留”状态。但是,我只想从列表中获取“已批准”状态的记录。 下面是我的代码

SpreadsheetsResource.ValuesResource.GetRequest request = service.Spreadsheets.Values.Get(spreadsheetId, range);

ValueRange response = request.Execute();
IList<IList<object>> values = response.Values;

下面是屏幕快照,显示值在列表中的显示方式

enter image description here

名称为“值”的列表包含所有记录。

任何帮助,将不胜感激!

2 个答案:

答案 0 :(得分:4)

您的数据作为集合返回,因此您可以通过其数字索引访问属性,例如

var approvedResults = values.Where(c => c[7] == "Approved");

或者您可以将其映射到适当的对象,例如

public class MyResultObject {
   public DateTime date {get; set;}
   public string FirstName {get; set;}
   ...
   public string ApprovedStatus {get; set;}

   public MyResultObject(string[] values)
   {
       date = DateTime.Parse(values[0]);
       FirstName = (string) values[1];
       ...
       etc.
   }
}

然后使用linq将您的数据转换为一堆数据,这会更好。

var myResultObjects = values.Select(c => new MyResultObject(c.Select(x => (string)x).ToArray());

您可能需要调整一些代码,因为我不确定ValueRange的工作原理,我只是在不检查的情况下输入了代码,但这就是要点。

然后您可以做myResultObjects.Where(c => c.ApprovedStatus == "Approved");,这会更好。

答案 1 :(得分:-1)

我通过使用下面的代码行实现了这一点

var result = values.Where(x => x.Contains("Approved")).ToList();

这只会给我提供“已批准”状态的记录。

谢谢!