0

私は2つのテーブルを持っています:

段階 :

long ID
string Name

および別のアクティビティ:

long ID
string Name
long PhaseID

フェーズの名前はすでに知っているので、それらの特定のフェーズのアクティビティを取得したいと思います。PhaseNameをアクティビティテーブルに追加しますか、それともLINQの結合を介して追加しますか?

多分このようなもの?

var query = from a in entities.Activities
                        join p in entities.Phases on a.PhaseId equals p.Id
                        where p.Name == "Preplanning"

...そしてここでこのクエリを終了する方法がわかりません。

ご協力いただきありがとうございます!

4

3 に答える 3

2

指定したコードは、を使用して、Inner Join「事前計画」という名前のフェーズが存在するすべてのアクティビティを検索します。
クエリを完了するには、select句を追加する必要があります。

var query = from a in entities.Activities
                 join p in entities.Phases on a.PhaseId equals p.Id
                 where p.Name == "Preplanning"
                 select a.Name   

IEnumerable<string>すべてのアクティビティ名が返されます。

于 2012-12-10T22:17:09.433 に答える
2

必要に応じて、アクティビティを選択するだけです。

var query = from a in entities.Activities
            join p in entities.Phases on a.PhaseId equals p.Id
            where p.Name == "Preplanning"
            select a;

クエリ式は次のようになります。

クエリ式はfrom句で始まり、 select句またはgroup句で終わる必要があります。最初のfrom句と最後のselectまたはgroup句の間に、これらのオプションの句の1つ以上を含めることができます:where、orderby、join、let、さらにはadditionalfrom句。intoキーワードを使用して、join句またはgroup句の結果を、同じクエリ式の追加のクエリ句のソースとして使用できるようにすることもできます。

不可解な画像と同じ:

ここに画像の説明を入力してください

メソッド構文を使用すると、クエリを特別なもので終了する必要はありません。

var query = entities.Phases
               .Where(p => p.Name == "Preplanning")
               .Join(entities.Activities, p => p.Id, a => a.PhaseId, (p,a) => a);
于 2012-12-10T22:17:13.397 に答える
1

テーブルの1つからのデータのみが必要な場合は、結合を行う必要はありません。代わりにフィルターを適用できます。

var q = entities.Activities.Where(a => 
        entities.Phases.Any(p => a.PhaseId == p.Id && p.Name == "Preplanning"));
于 2012-12-10T22:20:40.387 に答える