public IQueryable SearchUser(DropDownList systemddl, DropDownList membertypeddl, DropDownList stateddl, DropDownList salemanddl, TextBox searchtxt)
{
var dc = new DataClassesDataContext();
var search = searchtxt.Text.Trim(); var list = from m in dc.aspnet_Membership where m.ApplicationId.ToString() != "7DA23851-4337-46B1-BC1D-940FDD05492A" select new { m.aspnet_Applications.ApplicationName, m.UserId, m.aspnet_Users.UserName, m.CreateDate, m.Email, m.IsApproved, m.IsLockedOut, m.LastLoginDate, m.LastLockoutDate, m.aspnet_Users.PublicInfo.SaleMan, m.aspnet_Users.PublicInfo.CorpName }; if (systemddl.SelectedValue != "") //按用户所属网站查找用户
list = list.Where(p => p.ApplicationName == systemddl.SelectedItem.Text); if (membertypeddl.SelectedValue != "")//按用户所有权限查找用户
{
Guid businessId = new Guid("4D69C73F-25CE-4538-8B3F-01805387B203");
Guid newsRoleId = new Guid("C5F56C74-20BC-4829-97A5-A4E28A85497D");
Guid jobRoleId = new Guid("C0209A4F-1F1D-4F92-8338-918ED9216ACF"); if (membertypeddl.SelectedValue == "免费会员")
{
//获取所有收费会员的id
var chargelist = dc.aspnet_UsersInRoles.Where(p => (p.RoleId == businessId || p.RoleId == newsRoleId || p.RoleId == jobRoleId) && (p.Expire >= DateTime.Now)).Select(p => p.UserId);
list = list.Where(l => !chargelist.Contains(l.UserId));
}
else
{
Guid searchRoleId = new Guid(membertypeddl.SelectedValue);
var chargelist = dc.aspnet_UsersInRoles.Where(p => (p.RoleId == searchRoleId) && (p.Expire >= DateTime.Now)).Select(p => p.UserId).Take(2000);
list = list.Where(l => chargelist.Contains(l.UserId));
}
} if (stateddl.SelectedValue != "")
{
if (stateddl.SelectedValue == "1")
{
list = list.Where(u => u.IsApproved == true);
}
else if (stateddl.SelectedValue == "0")
{
list = list.Where(u => u.IsApproved == false);
}
} if (salemanddl.SelectedValue != "")
{
list = list.Where(p => p.SaleMan == new Guid(salemanddl.SelectedValue));
} if (search != null)
list = list.Where(p => p.UserName.Contains(search) || p.Email.Contains(search) || p.CorpName.Contains(search));
return list.OrderByDescending(p => p.CreateDate);
}
}
if (membertypeddl.SelectedValue == "免费会员")
{
//获取所有收费会员的id
var chargelist = dc.aspnet_UsersInRoles.Where(p => (p.RoleId == businessId || p.RoleId == newsRoleId || p.RoleId == jobRoleId) && (p.Expire >= DateTime.Now)).Select(p => p.UserId);
list = list.Where(l => !chargelist.Contains(l.UserId));
}
else
{
Guid searchRoleId = new Guid(membertypeddl.SelectedValue);
var chargelist = dc.aspnet_UsersInRoles.Where(p => (p.RoleId == searchRoleId) && (p.Expire >= DateTime.Now)).Select(p => p.UserId);
list = list.Where(l => chargelist.Contains(l.UserId));
}
}
//这段是出错的。。chargelist 里面有数据 list 有数据。但是
却出现 null 的异常。。请高人指点
解决方案 »
- C#调用C++ dll 函数实现内存拷贝的问题。
- 集合List和窗体上的ListBox同步问题
- 求助 正则表达式 在线等(急)
- DataGridView问题,请大家指点,多谢啦!
- 求助listview的事件
- TableLayoutPanel组件的使用疑惑??????在线等
- 有关VS.net编译器的困惑,有请求道解惑者...
- winform中如何按一个按钮就可以打开word文档并且把它呈现在面前
- DataGridView无法显示list的数据,为什么?
- 超时时间已到。在从池中获取连接之前超时时间已过。出现这种情况可能是因为所有池连接都已被使用并已达到最大池大小。?????
- C#中如何显示网格
- 基础问题,帮我把这几行c#改成asp的 (vbscript)
chargelist.count() = 2741
list.count()=4565
百分百肯定的。。
之前是charglist.ToList()但由于数目>2100所以就出错。
现在换成这样也照样出错。。
这句出错。。
UserId应该是int吧?int应该不会出问题的啊。
是不是我的charlist数量太多导致出错啦?
不可能因为太多而导致这样的错误。我处理过更多的数据,也没有问题。
写个简单的linq,
var q = list.Where(l => l.UserId == null);
看看q有没有结果就知道有没有null的UserId了。编程的时候要养成在任何可能出错的地方使用ASSERT的习惯。
if (membertypeddl.SelectedValue == "免费会员")
{
//获取所有收费会员的id
var chargelist = dc.aspnet_UsersInRoles.Where(p => (p.RoleId == businessId || p.RoleId == newsRoleId || p.RoleId == jobRoleId) && (p.Expire >= DateTime.Now)).Select(p => p.UserId);
if (chargelist.Count() > 0)
{
list = list.Where(l => !chargelist.Contains(l.UserId != null ? l.UserId : Guid.Empty));
}
}
else
{
Guid searchRoleId = new Guid(membertypeddl.SelectedValue);
var chargelist = dc.aspnet_UsersInRoles.Where(p => (p.RoleId == searchRoleId) && (p.Expire >= DateTime.Now)).Select(p => p.UserId).ToList();
if (chargelist.Count() > 0)
{
list = list.Where(l => chargelist.Contains(l.UserId != null ? l.UserId : Guid.Empty));
}
}换成这样啦,null 的就不要啦
照样不行啊。。跪求大家。。应怎样处理
list = list.Where(l => chargelist.Contains(l.UserId))?null:"";
我原来用的好好的。只是一种权限会员人数太多的时候都有这个问题。。
我想用一个外连接的办法来解决
{
var dc = DataContext;
var search = searchtxt.Text.Trim(); var list = from m in dc.aspnet_Membership
where m.ApplicationId.ToString() != "7DA23851-4337-46B1-BC1D-940FDD05492A"
join ap in dc.aspnet_UsersInRoles on m.UserId equals ap.UserId into temp
from x in temp.DefaultIfEmpty()
select new { m, m.aspnet_Users, m.aspnet_Users.PublicInfo, x };
//select new { m.aspnet_Applications.ApplicationName, m.UserId, m.aspnet_Users.UserName, m.CreateDate, m.Email, m.IsApproved, m.IsLockedOut, m.LastLoginDate, m.LastLockoutDate, m.aspnet_Users.PublicInfo.SaleMan, m.aspnet_Users.PublicInfo.CorpName,m.ApplicationId }; if (systemddl.SelectedValue != "") //按用户所属网站查找用户
list = list.Where(p => p.aspnet_Users.ApplicationId == new Guid(systemddl.SelectedValue)); if (membertypeddl.SelectedValue != "")//按用户所有权限查找用户
{
Guid businessId = new Guid(System.Configuration.ConfigurationManager.AppSettings["businessRoleId"].ToString());
Guid newsRoleId = new Guid(System.Configuration.ConfigurationManager.AppSettings["newsRoleId"].ToString());
Guid jobRoleId = new Guid(System.Configuration.ConfigurationManager.AppSettings["hrRoleId"].ToString()); if (membertypeddl.SelectedValue == "免费会员")
{
//获取所有收费会员的id
list = list.Where(p => p.x.RoleId == null || (p.x.RoleId != null && p.x.Expire < DateTime.Now));
}
else
{
Guid searchRoleId = new Guid(membertypeddl.SelectedValue);
list = list.Where(p => p.x.RoleId == searchRoleId && p.x.Expire >= DateTime.Now);
}
} if (stateddl.SelectedValue != "")
{
if (stateddl.SelectedValue == "1")
{
list = list.Where(u => u.m.IsApproved == true);
}
else if (stateddl.SelectedValue == "0")
{
list = list.Where(u => u.m.IsApproved == false);
}
} if (salemanddl.SelectedValue != "")
{
list = list.Where(p => p.PublicInfo.SaleMan == new Guid(salemanddl.SelectedValue));
} if (search != null)
list = list.Where(p => p.aspnet_Users.UserName.Contains(search) || p.PublicInfo.Email.Contains(search) || p.PublicInfo.CorpName.Contains(search)); return list.OrderByDescending(m => m.m.CreateDate).Select(m => new { m.m.aspnet_Applications.ApplicationName, m.m.UserId, m.aspnet_Users.UserName, m.m.CreateDate, m.m.Email, m.m.IsApproved, m.m.IsLockedOut, m.m.LastLoginDate, m.m.LastLockoutDate, m.aspnet_Users.PublicInfo.SaleMan, m.aspnet_Users.PublicInfo.CorpName, m.m.ApplicationId }); }这样运行的好好的。。
就是因为charlist里数目太多,导致生成不了查询语句。我是这样觉得的.