簡體   English   中英

Linq 查詢返回零

[英]Linq query returns a zero

我正在嘗試根據日期時間選擇器中的選定周搜索值,使用以下 Linq 查詢從數據表中搜索值。但它只返回一個 0。

選擇日期:

DateTime selecteddate = dateTimePicker1.Value.Date;
int currentDayOfWeek = (int)selecteddate.DayOfWeek;
DateTime sunday = selecteddate.AddDays(-currentDayOfWeek);
DateTime monday = sunday.AddDays(1);
if (currentDayOfWeek == 0)
{
  monday = monday.AddDays(-7);
}
List<DateTime> dates = Enumerable.Range(0, 7)
            .Select(days => monday.AddDays(days))
            .ToList();

我的 LINQ 查詢如下。

var sumIncomes = dataTable
    .AsEnumerable()
    .Where(r => r["Type"]?.ToString() == "Income" && 
                dates.Contains((DateTime)r["Date"]))
    .Sum(rs => (decimal)rs["Amount"]);

var sumExpenses = dataTable
    .AsEnumerable()
    .Where(r => r["Type"]?.ToString() == "Expense" && 
                dates.Contains((DateTime)r["Date"]))
    .Sum(rs => (decimal)rs["Amount"]);

我的數據表是這樣的。

在此處輸入圖像描述

我不確定是什么導致了這種行為。

我創建了像你一樣的表,這就是我發現的,你的 LINQ 表達式缺少一些東西。

List<DateTime> dates = Enumerable.Range(0, 7)
                        .Select(days => monday.AddDays(days))
                        .ToList();

               dates.Add(new DateTime(2021, 5, 10)); //add for simplicity to match one record from your table didn't have time to create win form project

var sumIncomes = datatable.AsEnumerable()
                          .Where(r => r.Field<string>("Type").Trim() == "Income" && 
                                      dates.Contains(r.Field<DateTime>("Date")))
                          .Sum(r => r.Field<int>("Amount"));

正如用戶@user18387401 指出的那樣,在這種情況下,您應該使用列類型提供的字段擴展方法字符串。 如果列類型為 nvarchar(10),則當您在表中插入數據時,您將在列中像“Income”這樣的數據,而不是像這樣的“Income”,因此您總是需要從數據庫中修剪字符串值。

r.Field<string>("Type").Trim()

您在此行程序上的 Sum 方法 (decimal)rs["Amount"] 中遇到的第二個問題將引發運行時異常“Invalid cast”,因為您有 Amount 的 int 列,在這里您嘗試以十進制進行轉換,您應該提供正確的類型場法。

r.Field<int>("Amount")

希望這對您有所幫助和工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM