LIKE到LINQ的SQL

2fjabf4q  于 2022-12-06  发布在  其他
关注(0)|答案(2)|浏览(127)

我有两个模型如下:

public class Transaction
{
    public int TransactionId { get; set; }
    public string Description { get; set; }
}

public class TransactionRule
{
    public int TransactionRuleId { get; set; }
    public string Pattern;
    public string action;
}

我的数据库中的两个表之间没有正式的关系。但是,TransactionRules包含“pattern”列,该列包含SQL LIKE模式,如“Hell World%"。TransactionRules.Descriptions列与TransactionRules.pattern列匹配。这将允许我获得所有事务的列表以及与描述匹配的任何规则。希望下面的查询能更好地描述这一点。

select 
    t.*, 
    tr.pattern,
from dbo.Transactions t
left join dbo.TransactionRules tr ON t.Description LIKE tr.pattern

我可以让这个工作在SQL没有太大的问题,但我正在努力产生一个LINQ等效。我会张贴我已经尝试到目前为止,但他们都产生语法错误,因此不会增加什么价值,我的职位。
虽然我可以求助于使用SQL,但我真的更愿意在Linq中尝试这一点,因为它将帮助我更好地理解Linq(这是学习Linq的一个练习)。

nxagd54h

nxagd54h1#

为了防止其他人遇到同样的问题,我设法生成了以下LINQ Query,它使用EF LIKE函数作为连接条件来实现左连接:

var list = (from t in db.Transactions
                     from tr in db.TransactionRules.Where(tr => EF.Functions.Like(t.Description, tr.Pattern)).DefaultIfEmpty()
                     select new { t.TransactionId, t.Description, tr.Pattern, tr.TransactionClass });
uajslkp6

uajslkp62#

LIKE的对等用法是Contains()。请尝试在where子句中使用它。

相关问题