回答

收藏

如何从LINQ实现SQL CASE语句

技术问答 技术问答 212 人阅读 | 0 人回复 | 2023-09-12

我是LINQ新手,我想知道能不能从新手开始LINQ实现以下SQL查询?, C( _) _: e/ l7 Q- {. \1 D
我正在使用Entity Framework Core。" u8 Q# j; Y6 Z; y
SELECT 0 [All],[Range] =    CASE          WHEN Value BETWEEN 0 AND 25 THEN 'Low     WHEN Value BETWEEN 25 AND 75 THEN 'Medium     WHEN Value BETWEEN 75 AND 90 THEN 'High     WHEN Value BETWEEN 90 AND 100 THEN 'Very High     END FROM Result.Calculation C     INNER JOIN Data.SampleSet S ON C.SampleSetID = S.ID  WHERE  S.SampleDrawn >= DATEADD(MONTH,-3,GETDATE()) AND S.Department = 'LOCATION A'目前,我正在使用以下方法FromSql调用存储过程。想知道不用存储过程能不能做同样的事情。: a1 o$ r' w, x5 r. H' W
var result = context.MyData.FromSql(“ data.GetMyData @pType = {0},@
  l1 L) F' K6 \& ~$ S/ EpLocation = {1},@ pNoOfDays = {2},@ pStartDate = {3},@ pEndDate =, ^+ R% f1 x3 l4 g  O3 l/ p6 p1 ?5 F
类型、位置、noOfDays,startDate,endDate).ToList();
) T" |% E8 j$ \2 |
谢谢。$ N. K0 f; v# e  `: z; Q( P! i
                                                                " y# y9 Y8 B$ ?( ?
    解决方案:                                                                + S; c, \) R! a
                                                                如果适合你,可以用。我只解释。LINQ查询部分。您可以将其与EF一起使用。我为这些创建了虚拟数据。EF,请改用IQueryable。# w+ z. O- `8 m6 F4 h( `% p2 D+ y
// from a row in first table// join a row in second table// on a.Criteria equal to b.Criteria// where additional conditions// select the records into these two fields called All and Range// Convert the result set to list.var query = (from a in lstCalcjoin b in lstSampleSeton a.SampleSetID equals b.ID where b.SampleDrawn >= DateTime.Now.AddMonths(-8)&& b.Department == "Location A"select new { All = 0,Range = Utilities.RangeProvider(a.Value) }).ToList();编辑:LINQ查询分组结果。    。确保您正在使用IQueryable。$ {1 P  ~) K& C& B9 |# ^& R. ^
    var query = (from a in lstCalc  join b in lstSampleSet  on a.SampleSetID equals b.ID where b.SampleDrawn >= DateTime.Now.AddMonths(-8)    && b.Department == "Location A"    group a by Utilities.RangeProvider(a.Value) into groupedData     select new Result { All = groupedData.Sum(y => y.Value),Range =    groupedData.Key }).ToList();这是相同的代码。5 I, f; m  ^) W+ P
    public class Program                                                                                                                                                                                                                 public static void Main(string[] args)                List lstCalc = new List();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;lstCalc.Add(new Calculation() {SampleSetID=1,Value=10 }lstCalc.Add(new Calculation() { SampleSetID = 1,Value = 10 }lstCalc.Add(new Calculation() { SampleSetID = 2,Value =       lstCalc.Add(new Calculation() { SampleSetID = 3,Value =           lstCalc.Add(new Calculation() { SampleSetID = 4,Value =        lstCalc.Add(new Calculation() { SampleSetID = 5,Value =          lstCalc.Add(new Calculation() { SampleSetID = 6,Value = 60 });            lstCalc.Add(new Calculation() { SampleSetID = 7,Value =       lstCalc.Add(new Calculation() { SampleSetID = 8,Value =         lstCalc.Add(new Calculation() { SampleSetID = 9,Value =       List lstSampleSet = new List();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;lstSampleSet.Add(new SampleSet() {Department = &quot;Location A&quot;,ID=1,SampleDrawn=DateTime.Now.AddMonths(-5));              lstSampleSet.Add(new SampleSet() { Department = &quot;Location A&quot;,ID = 2,SampleDrawn = DateTime.Now.AddMonths(-4)};               lstSampleSet.Add(new SampleSet() { Department = &quot;Location A&quot;,ID = 3,SampleDrawn = DateTime.Now.AddMonths(-3) };            lstSampleSet.Add(new SampleSet() { Department = &quot;Location A&quot;,ID = 4,SampleDrawn = DateTime.Now.AddMonths(-2) };           lstSampleSet.Add(new SampleSet() { Department = &quot;Location A&quot;,ID = 5,SampleDrawn = DateTime.Now.AddMonths(-2) };           lstSampleSet.Add(new SampleSet() { Department = &quot;Location A&quot;,ID = 6,SampleDrawn = DateTime.Now.AddMonths(-2) };           lstSampleSet.Add(new SampleSet() { Department = &quot;Location A&quot;,ID = 7,SampleDrawn = DateTime.Now.AddMonths(-1) };            var query = (from a in lstCalc                        join b in lstSampleSet                        on a.SampleSetID equals b.ID where b.SampleDrawn >= DateTime.Now.AddMonths(-8)8)                                  && b.Department == &quot;Location A&quot;                        select new { All = 0,Range = Utilities.RangeProvider(a.Value) }).ToList();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Console.WriteLine(query.Count);            Console.ReadLine();                  public class Utilities                                                                                                                                                                                                                                                                                                                                                                                                             public static string RangeProvider(int value)                                                                                                                                                                                                                                                                                                                                                                                                                     if (value > 0 && value  25 && value  75 && value <=           return &quot;High&quot;;              else             return &quot;Very High&quot;;              public class Result {       public int All { get; set;        public string Range { get; set; }   }    public class Calculation    {         public int SampleSetID { get; set;          public int Value { get; set;       public class SampleSet    {         public int ID { get; set; }; h: H7 t1 S% w
        public DateTime SampleDrawn { get; set; }
# J  u: Z. Z9 n        public string Department { get; set; }" Y8 L! |) Y& I  w: \
    }
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则