我在C#中這個數據表結果鏈接錯誤的DBNull
Date Employee Job1 Job2 Job3
1/1/2012 a 1 1 1
1/1/2012 b 2
1/1/2012 c 2 1 4
1/1/2012 d 4 2 1
1/2/2012 a 3 2 5
1/2/2012 b 2 2 2
1/2/2012 c 3 3 3
1/2/2012 d 1 1 1
1/3/2012 a 5 5 5
1/3/2012 b 2 2 6
1/3/2012 c 1 1
1/3/2012 d 2 3 4
2/1/2012 a 2 2 2
2/1/2012 b 5 5 2
2/1/2012 c 2 2 2
2/2/2012 a 3
2/2/2012 b 2 3 3
3/1/2012 a 4 4 2
爲了得到這樣的結果:
崗位1:
Employee January February March
A 9 5 4
B 6 7
C 6 2
D 7
LINQ的代碼是:
var monthEmpGroups = tblEmpJobs.AsEnumerable()
.Select(r => new
{
Row = r,
Employee = r.Field<String>("Employee"),
Year = r.Field<DateTime>("Date").Year,
Month = r.Field<DateTime>("Date").Month
})
.GroupBy(x => x.Employee);
DataTable tblMonthResultJob1 = new DataTable();
tblMonthResultJob1.Columns.Add("Employee", typeof(string));
var dtf = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat;
foreach (var empGroup in monthEmpGroups)
{
string employee = empGroup.Key;
var newRow = tblMonthResultJob1.Rows.Add();
newRow["Employee"] = employee;
var empMonthGroup = empGroup.GroupBy(mg => new { mg.Year, mg.Month });
foreach (var empYearMonthGroup in empMonthGroup)
{
int year = empYearMonthGroup.Key.Year;
int month = empYearMonthGroup.Key.Month;
string colName = string.Format("{0} {1}", dtf.GetMonthName(month), year);
if (!tblMonthResultJob1.Columns.Contains(colName))
tblMonthResultJob1.Columns.Add(colName, typeof(int));
int empJob1Count = empYearMonthGroup.Sum(x => x.Row.Field<int>("Job1"));
newRow[colName] = empJob1Count;
}
}
關於此線:
int empJob1Count = empYearMonthGroup.Sum(x => x.Row.Field<int>("Job1"));
I am getting error: {System.InvalidCastException: Cannot cast DBNull.Value to type 'System.int'. Please use a nullable type.
任何人都可以建議如何解決這個問題。
此狀態並沒有工作,當我寫這一行: INT empJob1Count = empYearMonthGroup.Sum(X => x.Row.Field( 「作業1」)); 我收到錯誤:不能隱式轉換類型'int?'到'int'。顯式轉換存在(你是否缺少一個轉換?) 所以我使用這一行: int empJob1Count = Convert.ToInt(empYearMonthGroup.Sum(x => x.Row.Field (「Job1」))); 仍然收到相同的錯誤。 –
user1254053
2013-02-25 11:32:16
它應該是x => x.Row.Field(「Job1」)?? 0 –
Phil
2013-02-25 12:00:33
謝謝@Phil。我確實懷疑Sum是否足夠聰明,可以自動忽略空值。顯然不是! :) – 2013-02-25 12:11:12