我正在处理LINQ,并且我坚持将查找表实现到对象然后查询该对象(或它的关联)的基本概念和技术。这可能是一个愚蠢的问题,可能有一个我应该自己解决的答案。但是我还没有找到一个解释方法,这个方法很难实现。
所以我创建了一个像这样的示例数据库结构
我希望两个LINQ查询第一个给我通过查找与指定的 object1 相关的所有 example2 记录,第二个给出我所有与指定 object2
相关的 example1 记录 希望有人可以开始我的大脑。类似
var examples = (from e in db.examples where e.example2.id == id).ToList();
快速编写SQL查询
SELECT * FROM [dbo].[example1] one
JOIN [dbo].[examplelookup] lu ON one.[id] = lu.[example1id]
JOIN [dbo].[example2] two ON lu.[example2id] = two.[id]
WHERE one.[id] = 1
刚刚扼杀并创造了这个,我认为应该解释一下
答案 0 :(得分:3)
我知道你接受了答案,但仅仅是为了记录:
这是使用Any()
的常见方案,它转换为sql中的exists
。如果您希望example1
引用特定的example2
(由id
指定),请执行以下操作:
from ex1 in example1
where ex1.example2s.Any(e => e.id = id)
select ex1
这为您提供了example1
个对象的独特列表,而SelectMany
的解决方案可能会生成包含重复项的列表。
答案 1 :(得分:2)
假设
example1-> examplelookup关系名称是examplelookups
example2-> examplelookup关系名称是examplelookups
examplelookup - > example1关系名称是example1
examplelookup - > example2关系名称是example2
给出了example1的id
db.example1.Where(x=>x.id == id).SelectMany(x=>x.examplelookups).Select(x=>x.example2);
反之亦然
db.example2.Where(x=>x.id == id).SelectMany(x=>x.examplelookups).Select(x=>x.example1);
编辑:基于Gert Arnold使用any子句的建议答案的附加更新(这已经被接受作为答案)
db.example1.Where(x=>x.examplelookups.Any(y=>y.example2.id == id));
反之亦然
db.example2.Where(x=>x.examplelookups.Any(y=>y.example1.id == id));
第二次编辑(再次在已经接受并回答之后但问题被修改为包括数据模型之后)
db.Example1.Where(x=>x.Id == id).SelectMany(x=>x.Example2); // could have duplicates
db.Example2.Where(x=>x.Example1.Any(y=>y.Id == id)); //alternate any form removing the duplicates
反之亦然
db.Example2.Where(x=>x.Id == id).SelectMany(x=>x.Example1); // could have duplicates
db.Example1.Where(x=>x.Example2.Any(y=>y.Id == id)); //alternate any form removing the duplicates
答案 2 :(得分:0)
我相信你所寻找的是加入。此代码将为您提供通过连接表具有相应example2记录的所有example1记录:
var x = from ex1 in example1
join exlookup in examplelookup on ex1.id equals exlookup.example1id
join ex2 in example2 on exlookup.example2id equals ex2.id
select ex1;
相反,ex2记录,只需将select ex1
替换为select ex2
。
答案 3 :(得分:0)
时间很短,但请尝试从查找表开始,以便查询两个关联
var examples = (from el in db.examplelookup
where el.example2id == id
select el.examples1.ToList();
此处也没有代码检查。