c# - Linq 查询等效于存在多个条件

标签 c# entity-framework linq tsql exists

我已经使用 linq 一段时间了,但在任何地方都没有遇到过这种情况,我的 google-fu 让我失望了。

基本上我有两个我没有定义的数据集,现在必须使用它们来返回数据。

class Header 
{
    string COMPANY_CODE
    string REFERENCE_NBR
    string REFERENCE_DUPLICATE
    ...
}

class Line 
{
    string COMPANY_CODE
    string REFERENCE_NBR
    string REFERENCE_DUPLICATE
    string STOCK_CODE
    string DESCRIPTION
    ...
}

从数据库的角度来看,他们是这样加入的

select *
from Header
inner join Line
    on header.COMPANY_CODE = Line.COMPANY_CODE
    and header.REFERENCE_NBR = Line.REFERNCE_NBR
    and header.REFERENCE_DUPLICATE = LINE.REFERENCE_DUPLICATE

并且有一个 1:Many 关系。

我正在为列表实现搜索功能,该功能旨在查找 STOCK_CODE 或 DESCRIPTION 中的值与给定搜索词匹配的任何行。我已经看到了几种使用 linq 查询进行连接的方法,但由于存在多个连接条件,我有点不知所措,并且没有找到任何我正在尝试执行的操作的示例。

如果我要在 SQL 中编写我试图在 lamda/linq 中获取的语句,它将是:

declare @searchtxt nvarchar(max) = 'test'

Select * 
from header h
where exists (
    select *
    from Line l
    where
        (
            l.stock_code like '%'+@searchtxt+'%' 
            or l.description like '%'+@searchtxt+'%'
        )
        and h.COMPANY_CODE = l.COMPANY_CODE
        and h.REFERENCE_NBR = l.REFERENCE_NBR
        and h.REFERENCE_DUPLICATE = l.REFERENCE_DUPLICATE
    )

如有任何帮助,我们将不胜感激!

最佳答案

也许,这个?

var result = header.Where(h => 
    Line.Any(l => (l.stock_code.Contains(searchtxt)
                  || l.description.Contains(searchtxt))
               && h.COMPANY_CODE == l.COMPANY_CODE
               && h.REFERENCE_NBR == l.REFERENCE_NBR
               && h.REFERENCE_DUPLICATE == l.REFERENCE_DUPLICATE));

关于c# - Linq 查询等效于存在多个条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54899020/

相关文章:

c# - 骑行速度与踏频传感器的BLE Gatt特性数据解析与运算

c# - 使用 Newtonsoft.Json 反序列化 DbGeometry

mysql - 具有 MySql 异常的 Entity Framework - "The underlying provider failed on Open."- "Reading from the stream has failed."

sql - 对于 Entity Framework ,对于 "TOP 1"使用 .First() 还是 .Take(1) 更好?

c# - 提取设置到 HashSet<uint> 中的位?

c# - 以编程方式使用 C# 和 LINQ 进行分组(可能是 OnSelecting?)

C# 与 Java 枚举(适用于 C# 新手)

c# - 具有通用类型的 StructureMap OnCreation

c# - LINQ 的 Count 扩展方法的 SQL 等价物并不明显

.net - 标准 SQL 查询比 Linq 2 SQL 快得多