0

私はLinqを使用するのにかなり慣れていないため、ac#データテーブルから最適なデータソースをフィルタリングするのが少し難しいことがわかりました。データテーブルに対して次のフィルタリングを実行する必要があります。データの背後にある背景は、フェイルセーフの目的で、さまざまなデータソースからの独立した冗長性を含む一連のレコードであるということです。ある時点で 1 つのデータソースが破損した場合、セカンダリまたは 3 番目のデータソースがそのイベント スレッドのプライマリ ソースになります。

元のデータ (例): 署名可能:

source  First       Last
d1      John        Smith
d1      John        Smith
d3      John        Smith
d1      Jane        Doe
d2      Jane        Doe
d3      Richard     Miles
d3      Richard     Miles
d1      Richard     Miles

これに 2 つの列を追加したいと思います: グループの一意のメンバーの数 (firstname、lastname、および datasource) と、個別のグループ (firstname、lastname、datasource) に基づくが、その特定の名のデータソースによって順序付けられた uniqueRecordGroupnumber少なくとも、姓には最も多くのレコードがあります。

source  First   Last    Count   UniqueRecordGroup
d1      John    Smith   2       1
d1      John    Smith   2       1
d3      John    Smith   1       2
d1      Jane    Doe     1       1
d2      Jane    Doe     1       2
d3      Richard Miles   2       1
d3      Richard Miles   2       1
d1      Richard Miles   1       2

次に、その特定のレコードの冗長性/信頼性の低いデータソースを排除するために、最終的にプライマリ (一意のレコード グループ 1) のみを除外します。

source  First   Last    Count   UniqueRecordGroup
d1      John    Smith   2       1
d1      John    Smith   2       1
d1      Jane    Doe     1       1
d3      Richard Miles   2       1
d3      Richard Miles   2       1

上記の手順は、データテーブル (datatable signintable など) で Linq を使用してどのように達成されますか?

ありがとうございました。

4

1 に答える 1

0

このアプリケーション機能を完了した後、この目的でLinqを使用することはお勧めしません。より複雑なLinqクエリのためのリソースやフォーラムはそれほど多くないことがわかりましたが、OracleまたはSQLでは、少なくとも必要な部分については多くのフォーラムや投稿があります。そのため、Linqスクリプトのc#/ asp.netレイヤーに機能を追加するのではなく、データベースクエリレイヤーに追加しました。

Oracleでは、上記を4つのステップで実行しました。

--1.  creating a derived table of unique instances of main data (a): (First, Last) and a count of instances in the main table:

b As
(select First, Last, source, COUNT(*) distinctpersoncount
From a
GROUP BY First, Last, source)

--2.  Rank the fills from greatest to least.

c As
(select b.*, row_number() over(partition by  First, Last
order by distinctpersoncount desc) as distinctpersonrowid
from b


--3.  combine the new distinctperson columns into a joined table with the original data a.

d As
(select a.*, c.distinctpersoncount, c.distinctpersonrowid
from a
left join c
on
.... (join conditions here)

--4.  select all the data in d, filtering by distinctpersonrowid = 1 (the best source).
于 2012-12-12T09:09:45.927 に答える