如何在连接表上使用LINQ?

时间:2016-08-15 15:23:54

标签: c# asp.net asp.net-mvc entity-framework linq

我试图在LINQ中复制的查询是:

/home/enlighter/anaconda2/lib/python2.7/dist-packages/guake/

我可以访问IdentityDbContext,但它只包含对组成对象表的引用,而不包含对连接表本身的引用,因此我不知道要尝试获取结果的内容。

或者,如果我可以使用这个原始查询,我想知道如何做到这一点。 谢谢。

4 个答案:

答案 0 :(得分:3)

我认为你已经记住了many-to-many与隐含"链接"的关系。 ("加入","交汇")表。这样的事情(很可能是你在为UserRole发言,但这并不重要):

public class One
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<Two> Twos { get; set; }
}

public class Two
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<One> Ones { get; set; }
}

public class MyDbContext : DbContext
{
    public DbSet<One> Ones { get; set; }
    public DbSet<Two> Twos { get; set; }
}

虽然您无法直接访问链接表,但您可以使用两个&#34; primary&#34;表与另一个的导航属性相结合。

所以,给定

var db = new MyDbContext();

两个

int count =
    (from one in db.Ones
     from two in one.Twos
     where one.Id == input_parameter1_from_code && two.Id == input_parameter2_from_code
     select new { one, two })
     .Count();

int count =
    (from two in db.Twos
     from one in two.Ones
     where one.Id == input_parameter1_from_code && two.Id == input_parameter2_from_code
     select new { one, two })
     .Count();

将生成与此类似的SQL查询:

SELECT
    [GroupBy1].[A1] AS [C1]
    FROM ( SELECT
        COUNT(1) AS [A1]
        FROM [dbo].[TwoOne] AS [Extent1]
        WHERE (1 = [Extent1].[One_Id]) AND (2 = [Extent1].[Two_Id])
    )  AS [GroupBy1]
你可以看到

是针对链接表的。

答案 1 :(得分:2)

在查询语法中:

var amount = (from record in DBcontext.joinTable
              where record.object1ID = input_parameter1_from_code &&
                    record.object2ID = input_parameter2_from_code
              select record).Count();

在方法语法中:

var amount = DBcontext.joinTable
                      .Where(record => record.object1ID = input_parameter1_from_code &&
                                       record.object2ID = input_parameter2_from_code)
                      .Count();

答案 2 :(得分:1)

您绝对可以将该查询与DbContext一起使用。在这里查看MSDN文档:

https://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.executequery(v=vs.110).aspx

这将是:

var Count = DbContext.ExecuteQuery("SELECT count(*) FROM joinTable where object1ID = input_parameter1_from_code 
AND object2ID = input_parameter2_from_code;");

答案 3 :(得分:0)

即使是链接表

,这也应该有用
dbContext.CollectionOne.where(x => x.Id ==  1).SelectMany(x => x.Collection2).where(y => y.Id == 2).Count()