检查linq中的最后一项

时间:2014-03-09 12:05:44

标签: c# linq asp.net-mvc-4

我将使用此bool函数检查包含记录是否是表中的最后一条记录,并根据其true false结果进行处理。

 public bool IsLast(int? id) {
            var islastcard = (from u in db.CardTables
                               where u.CardID == id 
                               select u);
            var alllist = (from u in db.CardTables
                            select u).ToList();
            if (islastcard.Equals(alllist[alllist.Count - 1])) {
                return true;
            }
            else {
                return false;
            }
        }

它检查记录islastcard是否是表alllist的最后一个,如果它是最后一个,那么我正在根据这些bool结果工作 -

var uploadedfile = (from u in db.CardTables
                                where u.CardID == cardtable.cardID
                                select new CardModel {
                                    cardID = cardtable.cardID,
                                    }).SingleOrDefault();
            if (IsLast(uploadedfile.cardID)) {
                ViewBag.lastitem = true;
            }
            else {
                ViewBag.lastitem = false;
            }

但是此检查始终会返回false

我如何匹配islastcard记录是否在列表alllist的最后?

1 个答案:

答案 0 :(得分:4)

这是因为您的islastcardIEnumerable,其中包含您的卡,而不是卡本身。如果您向其添加Single,则代码应该有效:

var last = islastcard.SingleOrDefault()
return last != null && last.Equals(alllist[alllist.Count - 1]));

但是,您的代码仍然非常低效,因为您检索整个列表,检查其最后一个itmem,然后将其丢弃。此外,您可以为可以根据其ID检查的内容实例化卡片对象。

更好的方法是直接检查最后一项的ID,如下所示:

public bool IsLast(int? id) {
    return id == db.CardTables.Select(c => c.CardID).LastOrDefault();
}