Linq.FirstOrDefault无法正常工作

时间:2014-04-19 10:10:04

标签: c# database linq

我有一个数据库,如果没有收回所选的DVD(所以到达的日期是空的),它应该写入链接标签,说明DVD仍然是租来的:

var j = (from s in db.Rentals where s.MovieTitle == tb_movietitle.Text 
         select s.takenbackdate).FirstOrDefault();

if (j == null)
{
    linkLabel1.Text = "The dvd is still rented";
}
else
{
    linkLabel1.Text = "Rentable";
}

如果我使用First()它表示它是空的,但是如果我使用FirstOrDefault()它会向所有电影显示null,即使它们已在数据库中取回日期。

2 个答案:

答案 0 :(得分:1)

当文档谈论空时,他们谈论源,元素列表。 因此,如果FirstOrDefaultFirst获得没有元素的源,则会返回默认值或抛出异常。

'Empty'不会引用'empty'值,就像空值一样。

要获得你想要的东西,试试这个:

// Find the first DVD with the given title. If not found, an exception is thrown.
var j = (from s in db.Rentals where s.MovieTitle == tb_movietitle.Text).First();

// If the taken back date is null, it is still rented.
if (j.takenbackdate == null)
{
    linkLabel1.Text = "The dvd is still rented";
}
else
{
   linkLabel1.Text = "Rentable";
}

答案 1 :(得分:0)

您可以尝试这样:

 var j = db.Rentals.Where(s=>s.MovieTitle.Contains(tb_movietitle.Text).Select(s=>s.takenbacktime ).FirstOrDefault();