gpt4 book ai didi

linq - ASP.Net MVC 将 Sql 转换为 Linq

转载 作者:行者123 更新时间:2023-12-01 12:46:28 25 4
gpt4 key购买 nike

我正在更新一个旧应用程序,以使用 EF 和 Linq。我在处理其中一个查询时遇到问题 - 在 SQL 中是:

SELECT    id, type_id, rule_name, rule_start, rule_end, rule_min
FROM Rules
WHERE (rule_min > 0)
AND (rule_active = 1)
AND (rule_fri = 1)
AND ('2012-01-01' BETWEEN rule_start AND rule_end)
AND (id IN
(SELECT rule_id
FROM RulesApply
WHERE (type_id = 3059)))
ORDER BY pri

到目前为止我有:

         var rules = db.Rules.Include("RulesApply")
.Where(t => (t.rule_active == 1)
&& (t.rule_min > 0)
&& (dteFrom >= t.rule_start && dteFrom <= t.rule_end)
&& (this is where I'm stuck)
)
.OrderBy(r => r.pri);

这是我在上面的 LINQ 中添加的最后一个子查询:

AND (id IN
(SELECT rule_id
FROM RulesApply
WHERE (type_id = 3059)))

模型是:

public class Rule
{
[Key]
public Int64 id { get; set; }
public Int64 hotel_id { get; set; }
public byte rule_active { get; set; }
public DateTime rule_start { get; set; }
public DateTime rule_end { get; set; }
public int rule_min { get; set; }
public int pri { get; set; }
public virtual ICollection<RuleApply> RulesApply { get; set; }
}

public class RuleApply
{

[Key, Column(Order = 0)]
public Int64 type_id { get; set; }
[Key, Column(Order = 1)]
public Int64 rule_id { get; set; }
[ForeignKey("rule_id")]
public virtual Rule Rule { get; set; }
}

谁能帮我完成这个查询?

谢谢,

标记

最佳答案

尝试这样做:

var rules = db.Rules.Include("RulesApply")
.Where(t => (t.rule_active == 1)
&& (t.rule_min > 0)
&& (dteFrom >= t.rule_start && dteFrom <= t.rule_end)
&& t.RulesApply.Any(a => a.type_id == 3059)
.OrderBy(r => r.pri);

如果 t.RulesApply 是非法的(即不编译),则将其替换为对指向的 Rules 对象上找到的导航属性的正确引用RulesApply 对象。

关于linq - ASP.Net MVC 将 Sql 转换为 Linq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15363031/

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