LINQ查询比较

时间:2012-11-20 02:31:29

标签: c# linq entity-framework

我在这里有2个LINQ查询,我只是想知道哪些查询是正确和快速使用的。

样本I

var GetUSer = (from UserItem in dbs.users
               where UserItem.UserID == UserID
               select new User(UserItem))
               .OrderBy(item => item.FirstName)
               .Skip(0)
               .Take(10)
               .ToList();

样本II

var GetUSer = (from UserITem in dbs.user
                 .Where(item => item.UserID == UserID)
                 .OrderBy(item => item.FirstName)
                 .Skip(0)
                 .Take(10)
                 .AsEnumerable()
               select new User(UserItem)).ToList();

虽然它们都运作良好,但我只是想知道哪个是最好的。

2 个答案:

答案 0 :(得分:0)

在这两者之间,我更喜欢第一个(为了便于阅读,如果你想让整个查询在数据库中执行,你需要切换一些东西)。如果它们都有效,那么它取决于你。

就个人而言,我不喜欢将查询语法与lambda语法混合,如果我不必,我更喜欢lambda。我会写它像:

var GetUsers = db.user
                 .Where(u => u.UserID == UserID)
                 .OrderBy(u => u.FirstName)
                 .Take(10)
                 .Select(u => new User(u))
                 .ToList();

这使用单一语法,在数据库中尽可能多地进行查询,并省去任何多余的调用。

答案 1 :(得分:0)

第二个更好,第一个做一个选择然后进行过滤,这意味着它必须先从数据库中获取数据,然后将其转换为User对象,然后进行过滤。

第二个将在数据库端进行查询,然后将其转换为用户对象

可以通过将选择移动到ToList()

之前来修复第一个