首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

IQueryable<T>查询数据库有关问题

2013-01-20 
IQueryableT查询数据库问题_LearnerRepository new LearnerRepository(new GAS_VeristaEntities())va

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个东西也是经常用滴,只是因为可以用循环套,所以即使不知道他们,了不起多写几行代码)

热点排行