如何忽略linq查询中的空白元素

时间:2010-03-23 13:29:16

标签: c# linq linq-to-sql

如何忽略linq查询中的空白元素

我有一个linq查询

            var usersInDatabase =
            from user in licenseUserTable
            where user.FirstName == first_name &&
             user.LastName == last_name 
            select user;

但是如果我到这里并且first_name或last_name为空,那么我仍想评估其他数据项。

3 个答案:

答案 0 :(得分:4)

    var usersInDatabase =
    from user in licenseUserTable
    select user;

    if (!string.IsNullOrEmpty(first_name)) { 
        usersInDatabase = usersInDatabase.Where(u => u.FirstName == first_name);
    }
    if (!string.IsNullOrEmpty(last_name)) { 
        usersInDatabase = usersInDatabase.Where(u => u.LastName == last_name);
    }

答案 1 :(得分:4)

var usersInDatabase =
    from user in licenseUserTable
    where 
        (user.FirstName == first_name || first_name == string.Empty) &&
        (user.LastName == last_name || last_name == string.Empty)
    select user;

现在您将获得与给定名字匹配的记录,如果first_name为空,只要它与姓氏匹配,所有记录都匹配,除非last_name也是空白。现在唯一的问题是,如果first_name和last_name为空,那么你将获得所有内容。

答案 2 :(得分:0)

这是单一陈述式的方法,但我发现Mark的风格更清晰:

var usersInDatabase =
    from user in licenseUserTable
    where string.IsNullOrEmpty(first_name) || user.FirstName == first_name
    where string.IsNullOrEmpty(last_name) || user.LastName == last_name
    select user;