Here is my LINQ query
var listLogOutItems =
(from A in data
orderby A.FirstName
select new {
Login = "Logout",
Name = A.FirstName + " " + A.SurName,
ID = A.Id,
LogoutDate = A.LogOutTime.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)[0]
}).Distinct();
if A.LogOutTime is null then return "Unknown". How can do this?
The simplest way is probably to use the null coalescing operator ??
.
LogoutDate = (A.LogOutTime ?? "Unknown").Split(...)[0]
If A.LogOutTime
is null
, it'll use "Unknown"
instead. This is slightly inefficient as it will be calling Split
on a string we know doesn't need splitting... in C# 6 you could use the null conditional operator instead:
LogoutDate = A.LogOutTime?.Split(...)[0] ?? "Unknown"
Here, if A.LogOutTime
is null
, Split
won't be evaluated, and the result of that part of the expression will be null
- then the null coalescing operator is used just at the end.
As an aside, rather than creating a new char[]
every time, you might as well just have a static field:
private static readonly ArrayWithSpace = new[] { ' ' };
Then reuse that on every call to Split
.
See more on this question at Stackoverflow