读书人

IQueryablelt;Tgt;查询数据库有关问题

发布时间: 2013-01-20 10:22:40 作者: rapoo

IQueryable<T>查询数据库问题
_LearnerRepository = new LearnerRepository(new GAS_VeristaEntities());
var learner = _LearnerRepository.GetThemAll();
_ClassInStudentRepository = new ClassInStudentRepository(new GAS_VeristaEntities());
var cisr = _ClassInStudentRepository.GetThemAll();

上面从数据库中取出两个表的所有行。

表结构类似
learner表包括列
LearnerID LearnerName ...
101
102
103

cisr表包括列
ClassinStudentID LearnerID ReceipNo
1 101 s
2 102 a
3 103 s

现在给出ReceipNo,获取对应的learner表的相应行。

if (!string.IsNullOrEmpty(searchString5)) //searchString5 为ReceiptNo
{
cisr = cisr.Where(u => u.RecieptNo == searchString5);
foreach (var id in cisr)
{
learner = learner.Where(u => u.LearnerID == id.LearnerID);
}
}
这样只能取出一行数据,如果查询ReceiptNo为s,怎么查出全部行


if (!string.IsNullOrEmpty(searchString5))
{
cisr = cisr.Where(u => u.RecieptNo == searchString5);
bool firsttime = true;
_LearnerRepository1 = new LearnerRepository(new GAS_VeristaEntities());
foreach (var id in cisr)
{
var learner1 = _LearnerRepository1.GetThemAll();
if (firsttime)
{
learner = learner.Where(u => u.LearnerID == id.LearnerID);
firsttime = false;
}
else
{
learner = learner.Union(learner1.Where(u => u.LearnerID == id.LearnerID));
}
}
firsttime = true;
}
这样试过,但learner类型有变化,后续
public PaginatedList(IQueryable<T> source, int pageIndex, int pageSize)
{
PageIndex = pageIndex;
PageSize = pageSize;
TotalCount = source.Count(); -------------这里出错。{"The specified LINQ expression contains references to queries that are associated with different contexts."}



TotalPages = (int)Math.Ceiling(TotalCount / (double)PageSize);

this.AddRange(source.Skip(PageIndex * PageSize).Take(PageSize));
}

[解决办法]
if (!string.IsNullOrEmpty(searchString5)) //searchString5 为ReceiptNo
{
cisr = cisr.Where(u => u.RecieptNo == searchString5);
foreach (var id in cisr)
{
learner = learner.Where(u => u.LearnerID == id.LearnerID);
}
}
这样只能取出一行数据,如果查询ReceiptNo为s,怎么查出全部行

if (!string.IsNullOrEmpty(searchString5)) //searchString5 为ReceiptNo
{
learner = cisr.Where(u => u.RecieptNo == searchString5).Select(x => learner.Where(u => u.LearnerID == x.LearnerID));
}


TotalCount = source.ToList().Count();
[解决办法]
咋又是这问题呢,昨天有人问了一个一模一样滴

还是一样的回答,join,groupjoin,selectmany都可以。

代码不写,希望你能自己写出来。东西不难,你无非不知道上面3个一般情况很少用的关键词(其实把,这3个东西也是经常用滴,只是因为可以用循环套,所以即使不知道他们,了不起多写几行代码)

读书人网 >C#

热点推荐