0

次のような結果になるLINQクエリを作成しました。

var res = from a  in tbl
          group a by {a.StateCode,a.CityCode} into grp
          //where grp.Count() == 1
          select ...

StateCode       CityCode           ......
------------------------------------------
01               001               ......
01               002               ......
02               001               ......
03               001               ......
03               002               ......
03               003               ......

実際、最終結果に1つの結果行があるため、レコードだけを取得したい.02 001コメント付きのコードを追加すると、自分のグループの数ではなく、各グループに対応するレコードの数が返されます.2つでこれを実行できることはわかっていますgroup byが、結果に(たとえば)1行ある行を取得するより良い方法は?

4

2 に答える 2

1

StateCodeCityCode でグループ化しているため、各グループには 1 つの要素しかありません。StateCode のみでグループ化し、where grp.Count() == 1再度含める必要があります。

各グループには、StateCode がキーとして含まれ、要素の列挙が含まれます。単一の要素のみを持つグループを既にフィルタリングしたため、各グループの最初のものを返すことができます。

var res = from a in tbl
          group a by a.StateCode into grp
          where grp.Count() == 1
          select grp.FirstOrDefault();
于 2013-10-26T10:03:35.163 に答える
0

これはどう:

(from b in Tbls
where (from a in Tbls
       where a.StateCode == b.StateCode
       group a by a.StateCode into grp
       where grp.Count () == 1
       select grp).Count() > 0
select b).Dump();

テストに使用したSQLは次のとおりです。

create table tbl (StateCode varchar(5), CityCode varchar(5))

insert tbl values ('01', '001')
insert tbl values ('01', '002')
insert tbl values ('02', '001')
insert tbl values ('03', '001')
insert tbl values ('03', '002')
insert tbl values ('03', '003')
于 2013-10-26T08:31:51.833 に答える