2013-10-29 159 views
-3
  • 如何将以下SQL查询转换为linq?这就是试图如何将SQL查询转换为LINQ?

    SELECT COUNT(DISTINCT SampleDateTime)为总 FROM dbo.PrecisionArchive WHERE AgencySourceId = 7,事件类型IN( 'R', 'ONS')

回答

2

你可以使用:

var total = dbo.PrecisionArchive.Where(p => p.AgencySourceId == 7) 
           .Where(p => p.EventType == "R" || p.EventType == "ONS") 
           .Select(p => p.SampleDateTime) 
           .Distinct() 
           .Count(); 
+3

@dasblinkenlight我有这样的说法本来,但认为这是更具可读性/可维护的,因为另一个需要使用括号。当然可以工作。 –

+0

我喜欢使用圆括号:) – dasblinkenlight

+0

这是工作感谢 – user1123399

1

像这样的东西应该工作:

var result = 
    (from x in dbContext.PrecisionArchive 
    where x.AgencySource == 7 && 
      (x.EventType == "R" || x.EventType == "ONS") 
    select x.SampleDateTime) 
    .Distinct() 
    .Count(); 

你也可以尝试使用Contains代表IN条款,但我不相信这是由LINQ到SQL支持:

var result = 
    (from x in dbContext.PrecisionArchive 
    where x.AgencySource == 7 && 
      new[] { "R", "ONS" }.Contains(x.EventType) 
    select x.SampleDateTime) 
    .Distinct() 
    .Count(); 
+0

@DouglasBarbin没有'包含'像Linq到SQL支持_is_。它会翻译成SQL'IN(...)' – Magnus

+0

我的错误。在这种情况下,'.Contains'应该是正确的。 –

+0

这种方法也适用。谢谢 – user1123399