2010年8月10日 星期二

在Entity Framework應用中善用ICollection介面中的判斷方法Any()

我們使用ADO.NET Entity Framework 等ORM(Object Relation Model)的方式自資料庫中存取資料時,常會遇到若存取結果是有資料時,我們要進行一些A處理,而沒有任何資料時,我們則進行B處理,我們可以,但最好不要使用直接使用ICollection介面中的count()方法來進行是否有回傳任何資料項目的判斷,因為有可能自資料庫中存取資料回傳的不是符合ICollection或者是List等序列型態的資料集合,另外也有可能是傳回Null,所以,我們可以使用ICollection介面中的Any()這個方法來判斷有回傳任何項目。





如下範例,若自資料庫查詢到有一些論壇(Forum)資料存在,則此時Any() = true,則我們可進行A處理(如近一步過濾查詢出來的資料或記錄存取資料等等);若查詢出沒有包含任何資料時,我們可進行B處理(如下範例讓forumAreas=null並回傳出去)。

TOYEntities _contx = new TOYEntities();
public List<ForumArea> SelectAll()
{
    var forumAreas = (from m in _contx.ForumAreas
        select m).ToList();
    if (forumAreas.Any())
    {
        //do A process
    }
    else
    {
        //do B process
        forumAreas = null;
    }
    return forumAreas;
}

我們就用Any()去判斷資料項目的有無,可以避免與掌控很多網站程式動態執行時的例外狀況,增加程式的穩定性。

沒有留言:

張貼留言