gpt4 book ai didi

sql - LINQ 到 SQL : subfilter in where conditions

转载 作者:行者123 更新时间:2023-12-04 06:11:20 24 4
gpt4 key购买 nike

这个问题可能已经在某处得到了回答(如果是的话,我很想拥有链接!)。但是由于我不知道我要尝试执行哪种类型的 linq 查询,因此我找不到任何可以帮助我的东西。

我已经有一个非常简单的查询设置来获取 DomainSequences 类型的所有记录。

var query = db.DomainSequences;

有不同类型的域序列。我想全部得到。但是,对于具有等于“AT”的 DomainType 属性的记录,那么我只想返回其中的一些“AT”记录(即,对那些过滤“AT”记录但仍想返回的 where 子句执行所有非“AT”记录。

更简单地说,我想获取所有 DomainSequence 记录,但对于具有 DomainType == "AT"的记录,只有在满足某些条件时才返回这些记录。

我可以想出一种方法来做这样的事情:
 query.Where(x => x.DomainType != "AT" || (x.DomainType == "AT" && AT conditions....));

我认为这应该可行,但是当我必须在其他列上执行子过滤器时,问题就出现了,然后它很快就会变得更加困惑和复杂。

理想情况下,我想做类似的事情
 query.Where(x => x.DomainType == "AT" || x.DomainType == "KS")
.WhereIf(y => y.DomainType == "AT" then apply filter on those)
.WhereIf(z => z.DomainType == "KS" then apply filter to these);

我不确定是否有办法在 LINQ 或 SQL 中执行这种类型的子过滤器(尽管我想有)。关于如何相对干净地完成这项工作的任何建议?

谢谢!

最佳答案

它与您在 SQL 中编写的内容实际上并没有什么不同。事实上,如果您尝试使用查询表达式语法方法,您可能会发现这种特定的连接更容易建立。

var query = from domain in db.DomainSequences 
where (domain.DomainType == "AT" && domain.Foo == 42 && ...)
|| (domain.DomainType == "KS" && domain.Foo = 117 && ...)
select domain;

这很好地映射到您可能希望编写的 SQL
SELECT *
FROM DomainSequences
WHERE
(DomainType = 'AT' AND Foo = 42 AND ...)
OR
(DomainType = 'KS' AND Foo = 117 AND ...)

当然,您可以使用 lambdas 将其保留在流畅的扩展方法语法中,当然,它只是一个 .Where(...)毕竟调用。

关于sql - LINQ 到 SQL : subfilter in where conditions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7734527/

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