gpt4 book ai didi

c# - linq to 实体,where in where 子句? (里面的地方)

转载 作者:可可西里 更新时间:2023-11-01 08:35:17 25 4
gpt4 key购买 nike

我有一个表,该表具有到一个表的一对多映射,该表具有到另一个表的多对多映射。我想执行以下操作:

var results = context.main_link_table
.Where(l => l.some_table.RandomProperty == "myValue" &&
l.some_table.many_to_many_table
.Where(m => m.RandomProperty == "myValue"));

我怎样才能做到这一点?第一部分会起作用,但在没有“内部 WHERE”的情况下尝试时,我无法访问 many_to_many_table 的属性,但“内部位置”显然无法编译。我基本上想实现类似以下 SQL 查询的东西:

SELECT * from main_link_table
INNER JOIN some_table AS t1 ON t1.association = main_link_table.association
INNER JOIN many_to_many_table AS t2 ON t2.association = some_table.association
WHERE t1.RandomProperty = 'MyValue' AND t2.RandomProperty = 'MyValue'

这看起来很简单,但我找不到在一行 linq 中实现它的方法 - 使用多行来实现所需的效果会返回太多结果,我最终不得不循环遍历它们。我也尝试过类似的东西:

var results = main_link_tbl.Include("some_table.many_to_many_table")
.Where(l => l.some_table.many_to_many_table.<property>
== "MyValue")

但此时我无法选择 many_to_many_table 的属性,除非我添加 FirstOrDefault(),因为它不会搜索所有记录,所以效果无效。

什么有效,但需要多行代码,并且在后台返回由 linq-to-entities 框架构建的 SQL 查询中的太多结果:

var results = db.main_link_table.Include("some_table")
.Include("some_table.many_to_many_table")
.Where(s => s.some_table.RandomProperty
== "myValue")
.Select(s => s.some_table);

foreach(var result in results) {
var match_data = result.Where(s => s.many_to_many_table.RandomProperty
== "myValue");
}

这段代码将返回 some_table 中与第一个 Where 条件匹配的所有行,然后应用下一个 Where 条件,而我显然只需要一个行,其中 many_to_many_table.RandomProperty 等于 myValue。

最佳答案

如果您将内部 Where 更改为 Any,它应该可以工作:

var results = context.main_link_table
.Where(l => l.some_table.RandomProperty == "myValue" &&
l.some_table.many_to_many_table
.Any(m => m.RandomProperty == "myValue"));

关于c# - linq to 实体,where in where 子句? (里面的地方),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8258838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com