我试图在LINQ中复制的查询是:
/home/enlighter/anaconda2/lib/python2.7/dist-packages/guake/
我可以访问IdentityDbContext,但它只包含对组成对象表的引用,而不包含对连接表本身的引用,因此我不知道要尝试获取结果的内容。
或者,如果我可以使用这个原始查询,我想知道如何做到这一点。 谢谢。
答案 0 :(得分:3)
我认为你已经记住了many-to-many
与隐含"链接"的关系。 ("加入","交汇")表。这样的事情(很可能是你在为User
和Role
发言,但这并不重要):
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()