如何使用 LinQ 获取 IQueryable() 而不是 List()?
How to get IQueryable() instead of List() using LinQ?
数据结构:
class Journal
{
public int JournalId {get; set;}
public DateTime JournalDate {get; set;}
public string OwnerId {get; set;}
}
class Event
{
public string EventId {get; set;}
public string EventName {get; set;}
}
有什么办法可以得到
首先我得到值列表
var events = DBContext.Events.Where(o => o.EventName.Contains(searchParam)).AsQueryable();
var values = events.Select(x => x.EventID).ToList();
我只知道在foreach循环中把查询结果放到list中。我创建了新列表,将所有值放在我需要的值列表中的事件中
JournalList = new List<Journal>();
foreach (string eventId in values)
{
var results = DBContext.Journals.Where(j => j.eventID.Equals (eventId)).ToList();
RegJournalList.AddRange(results);
}
GroupedList = JournalList.Select(t => new JournalGrouped()
{
JournalID = t.JournalID,
JournalDate = t.JournalDate
}).Distinct().ToList();
有没有办法用 IQueryable()
代替 JournalList
?
我建议你研究一下 join
。这基本上就是您要尝试做的事情
var result = (from event in DBContext.Events
where event.EventName.Contains(searchParam)
join journal in DBContext.Journals on event.EventID equals journal.JournalID
select new JournalGrouped()
{
JournalID = journal.JournalID,
JournalDate = journal.JournalDate
}).Distinct().ToList();
或者更好,因为您正在使用 Entity Framework 使用 navigation properties 并让框架为您完成工作。定义导航属性后,它将类似于:
from journal in DBContext.Journals.Include("full name of your Event class")
where journal.Event.EventName.Contains(searchParam)
select new JournalGrouped()
{
JournalID = journal.JournalID,
JournalDate = journal.JournalDate
}
如果您出于某种原因要坚持目前的做法,那么:
var values = DBContext.Events.Where(o => o.EventName.Contains(searchParam))
.Select(x => x.EventID);
var GroupedList = DBContext.Journals.Where(j => values.Contain(j.eventID))
.Select(t => new JournalGrouped()
{
JournalID = t.JournalID,
JournalDate = t.JournalDate
}).Distinct();
数据结构:
class Journal
{
public int JournalId {get; set;}
public DateTime JournalDate {get; set;}
public string OwnerId {get; set;}
}
class Event
{
public string EventId {get; set;}
public string EventName {get; set;}
}
有什么办法可以得到 首先我得到值列表
var events = DBContext.Events.Where(o => o.EventName.Contains(searchParam)).AsQueryable();
var values = events.Select(x => x.EventID).ToList();
我只知道在foreach循环中把查询结果放到list中。我创建了新列表,将所有值放在我需要的值列表中的事件中
JournalList = new List<Journal>();
foreach (string eventId in values)
{
var results = DBContext.Journals.Where(j => j.eventID.Equals (eventId)).ToList();
RegJournalList.AddRange(results);
}
GroupedList = JournalList.Select(t => new JournalGrouped()
{
JournalID = t.JournalID,
JournalDate = t.JournalDate
}).Distinct().ToList();
有没有办法用 IQueryable()
代替 JournalList
?
我建议你研究一下 join
。这基本上就是您要尝试做的事情
var result = (from event in DBContext.Events
where event.EventName.Contains(searchParam)
join journal in DBContext.Journals on event.EventID equals journal.JournalID
select new JournalGrouped()
{
JournalID = journal.JournalID,
JournalDate = journal.JournalDate
}).Distinct().ToList();
或者更好,因为您正在使用 Entity Framework 使用 navigation properties 并让框架为您完成工作。定义导航属性后,它将类似于:
from journal in DBContext.Journals.Include("full name of your Event class")
where journal.Event.EventName.Contains(searchParam)
select new JournalGrouped()
{
JournalID = journal.JournalID,
JournalDate = journal.JournalDate
}
如果您出于某种原因要坚持目前的做法,那么:
var values = DBContext.Events.Where(o => o.EventName.Contains(searchParam))
.Select(x => x.EventID);
var GroupedList = DBContext.Journals.Where(j => values.Contain(j.eventID))
.Select(t => new JournalGrouped()
{
JournalID = t.JournalID,
JournalDate = t.JournalDate
}).Distinct();