从数据集中的X个表中获取最大日期值

时间:2018-12-27 09:42:43

标签: c# linq datatable

我有一个带有1-3个表的DataSet,每个表都有一个名为m_date(字符串)的列 我想使用LINQ从所有这些产品中获得最大价值。

我知道如何获取每个表的最大值:

var maxDate=ds.Tables[index].AsEnumerable()
              .Max(x=>DateTime.Parse(x["m_date"].ToString())).ToString();

但是我不知道如何从所有表信息中获取最大值

编辑:

我现在有类似的东西可以工作:

DateTime maxDate=DateTime.MinValue;

foreach  (DataTable tbl in ds.Tables)
{
     DateTime maxDateCur=ds.Tables[index].AsEnumerable()
                  .Max(x=>DateTime.Parse(x["m_date"].ToString()));
     maxDate=new DateTime[] {maxDateCur,maxDate}.Max();
}

但是我感觉可以做得更好。

1 个答案:

答案 0 :(得分:5)

您可以按照以下方式进行操作:

var maxDate = Enumerable.Range(0, ds.Tables.Count)
        .SelectMany(index => ds.Tables[index].AsEnumerable())
        .Max(dataRow => dataRow.Field<DateTime>("m_date"))
        .ToString();
  • 使用Enumerable.Range生成索引,使我们能够访问每个单独的DataTable
  • 使用SelectMany获得一个IEnumerable<DataRow>
  • 使用Max获取最大值并将其转换为字符串。

稍有不同的变体是:

var maxDate = Enumerable.Range(0, ds.Tables.Count)
                .Select(index =>
                    ds.Tables[index].AsEnumerable()
                        .Max(dataRow => dataRow.Field<DateTime>("m_date")))
                .Max().ToString();
  • 使用Enumerable.Range生成索引,使我们能够访问每个单独的DataTable
  • 使用Select获得一个IEnumerable<DateTime>,该DateTime由每个DataTable的最大Max组成
  • 使用func createPostRequestWith(path: String?, parameters: [String : Any]? = nil, success : @escaping (Any?) -> (), failure : @escaping (NSError) -> ()) { if !(Alamofire.NetworkReachabilityManager()?.isReachable)! { let error = NSError(domain: "", code: -1003, userInfo: nil) failure(error) } else { guard let url = path else { return } Alamofire.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: createCurrentHeader()).validate(statusCode: 200..<300).responseJSON { response in switch response.result { //Remove loader here either after parsing or on error case .success(let data): success(data) case .failure(let error): print(error) if let responseData = response.data { var parsedResponseData = JSON.init(data: responseData) let customError = NSError(domain: parsedResponseData["message"].stringValue, code: response.response?.statusCode ?? 555, userInfo: nil) failure(customError as NSError) } else { failure(error as NSError) } } } } } 获取DateTime的最大值,然后转换为字符串表示形式。