1

LINQ に次のステートメントがあります。

var eventsWithTag = (from occurence in occurrences1
                     join eventTag in serviceContext.CreateQuery("adx_eventtag_event")
                         on occurence.Event.GetAttributeValue<Guid>("adx_eventid") equals eventTag.GetAttributeValue<Guid>("adx_eventid")
                     join tag in serviceContext.CreateQuery("adx_eventtag")
                         on eventTag.GetAttributeValue<Guid>("adx_eventtagid") equals tag.GetAttributeValue<Guid>("adx_eventtagid")
                     where tag.GetAttributeValue<string>("adx_name") == "scotland"
                     select occurence).OrderBy(x => x.Start);

これは、この例では "Scotland" の固定文字列検索で問題なく機能します。ただし、現在のページのトピックを反映するには、それを置き換える必要があります。だから本質的に私は交換する必要があります

== "scotland"

== getBranch()

ここで、getBranch は関連するブランチ名を文字列として返します。

これは私が試してみることにつながるでしょう

eventsWithTag = (from occurence in occurrences1
join eventTag in serviceContext.CreateQuery("adx_eventtag_event") on occurence.Event.GetAttributeValue<Guid>("adx_eventid") equals eventTag.GetAttributeValue<Guid>("adx_eventid")
join tag in serviceContext.CreateQuery("adx_eventtag") on eventTag.GetAttributeValue<Guid>("adx_eventtagid") equals tag.GetAttributeValue<Guid>("adx_eventtagid")
where tag.GetAttributeValue<string>("adx_name") == getBranch()
select occurence).OrderBy(x => x.Start);

しかし、これは機能しません。私がLINQについて知っていることはほとんどありません。これは、この方法で変数を使用できないためです。

私の質問は次のとおりです。上記の LINQ クエリをブランチの動的な値で使用するにはどうすればよいですか。

注:これに関する他の投稿を見たことがありますが、特定のニーズにそれらを転送するためのLINQの知識がないようです。まだ!

4

2 に答える 2

2

事前に電話をかけることができます:

var branch = getBranch();
eventsWithTag = 
    (from occurence in occurrences1
     join eventTag in serviceContext.CreateQuery("adx_eventtag_event") on occurence.Event.GetAttributeValue<Guid>("adx_eventid") equals eventTag.GetAttributeValue<Guid>("adx_eventid")
     join tag in serviceContext.CreateQuery("adx_eventtag") on eventTag.GetAttributeValue<Guid>("adx_eventtagid") equals tag.GetAttributeValue<Guid>("adx_eventtagid")
     where tag.GetAttributeValue<string>("adx_name") == branch 
     select occurence)
    .OrderBy(x => x.Start);
于 2013-04-25T18:41:26.510 に答える
2

すべてが正しいように見えるので、getBranch() を再確認します...

これが機能する場合:

var branch = "scotland";
eventsWithTag = 
    (from occurence in occurrences1
     join eventTag in serviceContext.CreateQuery("adx_eventtag_event") on occurence.Event.GetAttributeValue<Guid>("adx_eventid") equals eventTag.GetAttributeValue<Guid>("adx_eventid")
     join tag in serviceContext.CreateQuery("adx_eventtag") on eventTag.GetAttributeValue<Guid>("adx_eventtagid") equals tag.GetAttributeValue<Guid>("adx_eventtagid")
     where tag.GetAttributeValue<string>("adx_name") == branch 
     select occurence)
    .OrderBy(x => x.Start);

次に、pswgの答えが機能するはずです。問題は、getBranchがどのレコードにも一致しない値を返すことにあります...

少し別の問題ですが、 equals ステートメントで実際の属性を取得する必要がある理由について少し混乱しています。thisによると、次のようにうまく機能するはずです。

var branch = "scotland";
eventsWithTag = 
    (from occurence in occurrences1
     join eventTag in serviceContext.CreateQuery("adx_eventtag_event") on occurence.Event["adx_eventid"] equals eventTag["adx_eventid"]
     join tag in serviceContext.CreateQuery("adx_eventtag") on eventTag["adx_eventtagid"] equals tag["adx_eventtagid"]
     where tag["adx_name"] == branch 
     select occurence)
    .OrderBy(x => x.Start);
于 2013-04-25T19:07:06.530 に答える