处理LINQ查询的结果

时间:2014-10-10 11:23:35

标签: c# linq entity-framework

在这样的代码中,用于根据条件检查对象是否存在, 如何在检查计数后处理查询集合。

 var query = from p in someContext
             where (p.Name == Name && p.Status == true)
             select p;

 if (query.Count() > 0)
    return true;
 else
    return false;

这是一个简单的场景,但可能存在查询可能导致巨大集合的情况。 所以我的问题是在需要检查对象是否存在的情况下,怎么做 写入此查询,以便在完成计数检查后结果集合不在内存中。

问候。

1 个答案:

答案 0 :(得分:2)

LINQ扩展方法.Count()实际执行的操作取决于所使用的查询提供程序。对于实体框架(假设您正在使用的内容),将生成一个SQL查询,该查询将返回记录计数,而不是记录本身。因此,您无需担心处理大型集合。

示例代码:

class Program
{
    static void Main( string[] args )
    {
        using( var db = new TestContext() )
        {
            db.Database.Log += Console.WriteLine;

            var query = from mfg in db.Manufacturers
                        where mfg.Name.Contains( "Inc." )
                        select mfg;

            var count = query.Count();
        }

        Console.ReadLine();
    }
}

生成SQL:

select
    [GroupBy1].[A1] AS [C1]
    FROM ( SELECT
        COUNT(1) AS [A1]
        FROM [dbo].Manufacturers] AS [Extent1]
        WHERE [Extent1].[Name] LIKE N'%Inc.%'
    )  AS [GroupBy1]