1

選択結果セットの各州と州テーブルのすべての列の都市数が必要です。TSQL クエリがありますが、LINQ で内部クエリとグループ化に取り組む方法がわかりません。

状態表

StateID,StateName,Description,Address,SectionName

都市テーブル:

CityID,StateID,Address,Description

ここでは、TSQL クエリを LINQ に変換する必要があります。

declare @State varchar(100)
set @State='IL'

SELECT s.*,oCities.CityCount
from ( 
        Select c.StateID,count(*) CityCount
        from States s inner join Cities c on 
        s.StateID =c.StateID 
        where s.StateName =@State
        group by c.StateID 
    ) oCities inner join States s on oCities.StateID = s.StateID 
where s.StateName =@State

できればC#言語ですが、助けていただければ幸いです

4

2 に答える 2

3

外部キーが正しく定義およびインポートされていると仮定すると、次のようなものが機能するはずです

var state = states.Where (s => s.StateName == name).Select (
    s => new {State=s, CityCount=s.Cities.Count()}).SingleOrDefault ();

Linq to SQL を使用すると、これは次のように変換されます

SELECT [t2].*, [t2].[value] AS [CityCount]
FROM (
    SELECT [t0].*, (
        SELECT COUNT(*)
        FROM [City] AS [t1]
        WHERE [t1].[StateId] = [t0].[Id]
        ) AS [value]
    FROM [State] AS [t0]
    ) AS [t2]
WHERE [t2].[StateName] = @p0

p0 は @state パラメータです。

于 2012-04-29T09:55:26.627 に答える
2
var q1 = 
from c in cities
join s in states 
on c.StateID equals s.StateID
where s.StateName=statename
select new {city=c, state=s};

var result = q1.GroupBy(x=>x.state.StateID)
                .Select(x=>new {Count = x.Count(), state = x.First().state});
于 2012-04-29T08:23:31.420 に答える