2017-01-21 4 views
0

私のSQL Serverクエリ(下)は完全に正常に動作し、C#でLinQに変換しようとしています。LinQに 'count'句を使用してSQLクエリを変換します

SQLクエリ:(
、私は以下の形式でLINQクエリを描画することができるよ

enter image description here

私に正しい出力を与える:

SELECT addressline3, city, COUNT(*) as 'InstitutionNumber' 
FROM institutionenquiries 
WHERE CITY = 'AHMEDABAD' 
GROUP BY addressline3, city 
ORDER BY city; 

所望の出力がありますCOUNT(*) as 'InstitutionNumber'を除く)。

LINQクエリ:

var obj = (from u in dbContext.InstitutionEnquiry 
      where u.City == data.Trim().ToLower() 
      select new { 
       AddressLine3 = u.AddressLine3.Trim().ToLower(), 
       City = u.City.Trim().ToLower(), 
       InstitutionNumber = (from a in dbContext.InstitutionEnquiry 
            where a.City == data.Trim().ToLower() 
            select a).Count() 
      }).ToList(); 

これは私のすべてのための'InstitutionNumber' = 3カウントを与えます。

カウントのアスペクトを正しく取得できません。私はthisポストの答えを参照して、それは私にカウントを与えるが、私はLinQクエリ内でそれを入れ子にすることはできません。
有用な入力をいただければ幸いです。あなたが使用することができ、大文字と小文字の区別を無視する:

var obj = dbContext.InstitutionEnquiry 
     // WHERE CITY = 'AHMEDABAD' 
     .Where(w => w.City == "AHMEDABAD") // => Note   
     // GROUP BY addressline3, city 
     .GroupBy(g => new {g.AddressLine3, g.City}) 
     // SELECT addressline3, city, COUNT(*) as 'InstitutionNumber' 
     .Select(c => new {c.Key.AddressLine3, c.Key.City, InstitutionNumber = c.Count()}) 
     // ORDER BY city 
     .OrderBy(o=> o.City) 
     .ToList(); 

注:

+0

は、なぜあなたは小文字に 'データ' を変換している(u.City

今、私たちはクエリを書くことができます== data.Trim()。ToLower())データベースからの 'u'が大文字の場合? – jdweng

答えて

1

は、私はあなたがこのきゅうを使用することができると思う

.Where(string.Equals(w.City.Trim(), data.Trim(), StringComparison.CurrentCultureIgnoreCase)) 
1

最初の観測があるSQLのGROUP BYを持っているため、LINQがすべきことGroupByも持っている。

2番目の所見は、SQLの非集約型列が列単位であるため、LINQで選択した結果がグループのキーから得られることです。

var res = dbContext.InstitutionEnquiry 
.Where(u => u.City == data.Trim().ToLower()) 
.GroupBy(u => new { 
    AddressLine3 = u.AddressLine3.Trim().ToLower(), 
    City = u.City.Trim().ToLower() 
}).Select(g => new { 
    g.Key.AddressLine3, 
    g.Key.City, 
    Count = g.Count() 
}).ToList(); 
1

LINQ:

var obj = (from p in dbContext.InstitutionEnquiry 
group p by new 
{ 
    p.addressline3, 
    p.city 
} into grp 
select new 
{ 
    grp.Key.addressline3, 
    grp.Key.city, 
    InstitutionNumber = grp.Count(), 
}).ToList(); 

同等のラムダ式:

var obj = dbContext.InstitutionEnquiry 
.GroupBy(p => new { p.addressline3, p.city}) 
.Select(p => new { p.Key.addressline3, p.Key.city, InstitutionNumber = p.Count() }) 
.ToList(); 
関連する問題