Linq如何返回一个匿名类型的IQueryable来获取其记录数?

问题描述 投票:0回答:2

以下Linq查询返回匿名类型的IQueryable:

var users2 = from u1 in Users
         join u2 in distribs on u1.pDistribId equals u2.Id
         into temp
         from u3 in temp.DefaultIfEmpty()
         select new {
             u1.Id,
             u1.UserName,
             u1.pDistribId,
             pUserName = u3 == null ? "" : u3.UserName,
             u1.Phone,
             u1.Name,
             u1.pCustomUser,
             u1.CoName,
             u1.CoPhone,
             u1.Birthday,
             u1.QQ,
             u1.Email,
             u1.SelfIntr
         };

要获取users2的记录数,请使用以下方法:

var c = users2.Count();

结果出错:

Dbcomparonexpression需要类似的参数。

像这种匿名类型的IQueryable类型如何获得其记录数?

完整源代码:

用户:

var Users = from u in UserManager.Users
                        where u.Equals("user")
                        select new { u.Id, u.UserName, u.pDistribId, u.Phone, u.Name, u.CoName, u.CoPhone, u.pCustomUser, u.Birthday, u.QQ, u.Email, u.SelfIntr };

发行商:

var distribs = from u in UserManager.Users
                           where u.Role.Equals("distrib")
                           select new { u.Id, u.UserName, u.pDistribId, u.Phone, u.Name, u.CoName, u.CoPhone, u.pCustomUser, u.Birthday, u.QQ, u.Email, u.SelfIntr };

users2:

var users2 = (from u1 in Users
             join u2 in distribs on u1.pDistribId equals u2.Id
             into temp
             from u3 in temp.DefaultIfEmpty()
             select new {
                 u1,
                 u3
             }).ToList()
             .Select(x => new {
                 x.u1.Id,
                 x.u1.UserName,
                 x.u1.pDistribId,
                 pUserName = x.u3 == null ? "" : x.u3.UserName,
                 x.u1.Phone,
                 x.u1.Name,
                 x.u1.pCustomUser,
                 x.u1.CoName,
                 x.u1.CoPhone,
                 x.u1.Birthday,
                 x.u1.QQ,
                 x.u1.Email,
                 x.u1.SelfIntr
             });


var c = users2.Count();

在此代码中仍报告相同的错误:

var users2 = (from u1 in Users

c# linq anonymous-types
2个回答
0
投票

错误DbComparisonExpression requires parameters of a comparable type可能与您在.Equals()中使用where u.Equals("user")有关。看起来u是一个类,你将它与一个字符串进行比较。您正在比较两种不同的类型。


0
投票

对Linq查询结果使用ToList转换,也将转换sub linq

© www.soinside.com 2019 - 2024. All rights reserved.