我正在使用忘记了外键的数据库,我无法修改它。
我的想法是使用Linq查询“跟随”这个外键,我设法做的是:
MY_ENTITY_CONTEXT ctx = new MY_ENTITY_CONTEXT();
List<MY_ENTITY_OBJ1> objs1 = ctx.OBJ1.Where(mycondition).ToList();
List<MY_ENTITY_OBJ2> objs2 = ctx.OBJ2.Where(x=>x.objs1.Select(o=>o.FieldToJoin).ToList().Contains(x.FieldJoined)).ToList();
但是,我确信这不是最好的方法,我确信有更好的操作员,但我找不到哪一个。我想使用.Join()
但对我来说,就像在SQL中一样,它用于在属性上交叉的两个表的合成表示。
您知道哪种运营商最适合我的情况吗?
谢谢!
答案 0 :(得分:1)
您可以编写常规连接语句:
from o1 in ctx.OBJ1
join o2 in ctx.OBJ2 on o1.FieldToJoin equals o2.FieldJoined
where o1 == <mycondition>
select o2
当数据库中没有外键时,您甚至可以定义实体之间的关联。唯一的要求是一个实体引用另一个实体的主键(更确切地说:EF所知的主键)。所以你可以定义一个导航属性,如OBJ1.OBJ2s
。
答案 1 :(得分:0)
尝试这些解决方案
这将搜索keyword
中是否出现ArticleContents
。
var aa = ctx.OBJ1.Where(a => context.OBJ2.Any(b =>
b.ArticleContents.Contains(a.keyword))).ToList();
这将搜索ArticleTitle
与Title
var cc = ctx.OBJ1.Where(a => context.OBJ2.Select(b =>
b.ArticleTitle).ToList().Contains(a.Title)).ToList();
我更改了列名仅仅是为了清楚理解,它将适合您的场景。