【问题标题】:linq operators like in像 in 这样的 linq 运算符
【发布时间】:2010-09-22 07:45:11
【问题描述】:

嗨,

我有 3 个表格:ClipsBooks 以及 ClipBook

之间的关系

问题是: 我需要有 bookID=4book 和一些剪辑,我的意思是多对多

在简单的文本 sql 中会是这样的:

select * from Clips where clipID in (select clipID from ClipBook where bookID=4)

问题是:

我如何在没有运算符 Join 的情况下使用 Linq 来做到这一点

【问题讨论】:

  • 我不明白你为什么不想为这个使用 join。

标签: asp.net-mvc linq


【解决方案1】:

这可能是一个解决方案;

from cb in ClipBooks
where cb.BookID == 4
select cb.Clip;

ClipBooks.Where(cb => cb.BookId == 4).Select(cb => cb.Clip);

【讨论】:

    【解决方案2】:

    Contains 方法在 Linq 中转换为 IN 运算符,示例:

    String[] cities = {"London", "Paris", "Madrid"};
    
    from p in context.Person
    where cities.Contains(p.Adress.City)
    select p
    

    被翻译成一个 sql 子句,如:..WHERE a.City in ('London', 'Paris', 'Madrid') 其中 a 是与 Person 表连接后的 Address 表别名。

    编辑:

    您可以编写没有子查询的单个查询,但这很可能会转换为连接:

    var clips = (from c in context.ClipBooks
                 where c.BookID == 4
                 select c.Clip).Distinct();
    

    var clips =  from c in context.Clip
                 where c.ClicBooks.Any( cb => cb.BookID == 4)
                 select c
    

    任何在 Exists() 中翻译

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多