Linq to sql Linq to Sql:Join,为什么我需要加载集合
我有两个表需要一直一起加载,这两个表必须同时存在于数据库中。然而,我想知道为什么Linq to Sql要求我必须在集合中加载,然后进行联接,我只想联接两个表,其中一个记录的参数say=5,例如Linq to sql Linq to Sql:Join,为什么我需要加载集合,linq-to-sql,c#-3.0,Linq To Sql,C# 3.0,我有两个表需要一直一起加载,这两个表必须同时存在于数据库中。然而,我想知道为什么Linq to Sql要求我必须在集合中加载,然后进行联接,我只想联接两个表,其中一个记录的参数say=5,例如 var data = _repo.All<TheData>(); //why do I need a collection/IQueryable like this? var _workflow = _repo.All<WorkFlow>() .W
var data = _repo.All<TheData>(); //why do I need a collection/IQueryable like this?
var _workflow = _repo.All<WorkFlow>()
.Where(x => x.WFID== paramid)
.Join(data, x => x.ID, y => y.WFID, (x, y) => new
{
data = x,
workflow = y
});
行
var data=_repo.All()代码>类似于说“开始针对数据表构建查询”。
此函数返回一个IQueryable,其中包含针对数据库的查询定义
因此,这并不意味着您要用这一行加载整个数据表数据
查询将在执行.Count()、.Any()、First()、Single()或ToList()等操作时执行。这称为延迟执行
如果使用SingleOrDefault()结束查询,这将创建一个连接两个表的sql查询,添加筛选器并选择最顶端的记录或null(如果有更多记录,则抛出错误!)
您还可以使用Linq而不是查询扩展方法。
它看起来像:
var data = _repo.All<TheData>();
var _workflow = from w in _repo.All<WorkFlow>()
join t in _repo.All<TheData> on w.Id equals t.WFID
where x.WIFD = paramid
select new
{
data = t,
workflow = x
});
var数据=_repo.All();
var _workflow=从w在_repo.All()中
在w.Id等于t.WFID时加入t
其中x.WIFD=paramid
选择新的
{
数据=t,
工作流=x
});
var data = _repo.All<TheData>();
var _workflow = from w in _repo.All<WorkFlow>()
join t in _repo.All<TheData> on w.Id equals t.WFID
where x.WIFD = paramid
select new
{
data = t,
workflow = x
});