c# - 如何将带有多个条件(带有 LIKE)的 SQL SELECT INNER JOIN 查询写入 LINQ to SQL

标签 c# sql linq select inner-join

我一直在寻找如何做到这一点,我发现了一些接近的东西,但不完全是我想要的。我想知道这是否也对其他人有帮助,但我真的需要帮助。我有一个非常简单的 SELECT 语句,需要将其转换为 LINQ to SQL 以加快我们软件中的搜索速度:

SELECT  Animals.*
FROM    Animals 
        INNER JOIN AnimalAliases
        ON  Animals.AnimalID = AnimalAliases.AnimalID 
        AND AnimalAliases.Alias LIKE N'%USERINPUT%';

基本上,我希望能够执行具有多个条件的内连接,但其中一个条件与其中一个表(LIKE 语句)无关,这就是我陷入困境的地方。

var query = 
    from animal in context.Animals
    join animalAlias in context.AnimalAliases
        on new { animal.AnimalID, "USERINPUT" }
    equals new { animalAlias.AnimalID, animalAlias.Alias }
    select animal;

但这显然不起作用,因为我不希望 EQUALS 等于 USERINPUT,我想对其执行各种 LIKE 操作..

有人有任何见解吗?

最佳答案

我认为您正在寻找的只是一个普通的 WHERE 子句?

var query = from animal in context.Animals
   join animalAlias in context.AnimalAliases on animal.AnimalID equals animalAlias.AnimalID
   where animalAlias.Alias.Contains(USERINPUT)
   select animal;

别名文本不是外键关系的一部分 - 因此它不应该出现在联接中。


更新 - 在评论之后 - 包括来自 @Steven - 虽然上面的查询是正确的并且确实模仿了原始 SQL - 使用 Distinct() 可能是明智的输出 - 这将防止单个动物出现多个别名匹配的情况。

var query = (from animal in context.Animals
   join animalAlias in context.AnimalAliases on animal.AnimalID equals animalAlias.AnimalID
   where animalAlias.Alias.Contains(USERINPUT)
   select animal).Distinct();

关于c# - 如何将带有多个条件(带有 LIKE)的 SQL SELECT INNER JOIN 查询写入 LINQ to SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6177800/

相关文章:

mysql - 选择子查询产生结果,但如果在更新子句中使用则不会

mysql - 包含用户已保存产品的所有产品列表

c# - 我可以使用 ".Include"使用 Entity Framework 4 加载分层数据并根据某些条件过滤导航属性吗

c# - foreach 循环与数据库中的字符串

c# - 各种对象的可重复逻辑

c# - 如何设置现有的 Explorer.exe 实例来选择文件?

sql - 如何仅从 sqlite 中提取数字数据?

c# - TaskCreationOptions.LongRunning 选项和 ThreadPool

c# - 使用 C# 使用 Linq 更新 XML

sql - 如何获取列表顶部的某些SQL查询结果