3

Guid である Table1 から id 値を取得する必要があります。このクエリは null を返すこともあります。だから私は次のことから始めました

Guid? SomeID = from R in Table1
    join P in Table2
    on R.Id equals P.Id2
    where R.Name == 'blah blah' 
    select R.Id;

しかし、次のコンパイルエラーが発生します。

タイプ 'System.Linq.IQueryable' を 'System.Guid' に暗黙的に変換できませんか?

ガイドチェンジ?ガイドに助けにはなりませんでした。

Guid SomeID = from R in Table1
    join P in Table2
    on R.Id equals P.Id2
    where R.Name == 'blah blah' 
    select R.Id;

今では次のエラーが発生します。

タイプ 'System.Linq.IQueryable' を 'System.Guid' に暗黙的に変換することはできません

私は何を間違っていますか?

4

7 に答える 7

2

クエリは一致するすべての GUID を返し、タイプがありますIQueryable<Guid?>

IQueryable<Guid?> guids = 
    from R in Table1
    join P in Table2
    on R.Id equals P.Id2
    where R.Name == 'blah blah' 
    select R.Id;

1 つの GUID が必要な場合はFirst、、、、またはSingleFirstOrDefaultSingleOrDefault

Guild? guid = guids.FirstOrDefault();

または単一のステートメントで:

Guid? guid = Table1.Where(R => R.Name == "blah")
                   .Join(Table2, R => R.Id, P => P.Id2, (R,P) => R.Id)
                   .FirstOrDefault();

混合構文 (残念ながらFirstOrDefault、クエリ構文には同等の演算子はありません):

Guid? guid =  (from R in Table1
               join P in Table2
               on R.Id equals P.Id2
               where R.Name == 'blah blah' 
               select R.Id).FirstOrDefault();
于 2013-08-21T15:01:03.500 に答える
1

その LINQ ステートメントの戻り値は、GUID のリストです。具体的には、IEnumerable<Guid>.

.First()1 つの結果だけを期待している場合、または結果.FirstOrDefault()がなくて null を受け取りたいだけの場合は、クエリの結果を呼び出します。

于 2013-08-21T15:01:08.680 に答える
1

Enumerable.Selectシーケンスである を返すIEnumerable<T>ため、通常は複数のアイテムです。最初のアイテムを使用したい場合は、Firstまたは(空にすることができる場合)FirstOrDefault

Guid? SomeID = (from R in Table1
               join P in Table2
               on R.Id equals P.Id2
               where R.Name == 'blah blah' 
               select R.Id).First();
于 2013-08-21T15:02:13.253 に答える
0

このコードを試してください

使用するas Guid

以下を見てください:

Guid SomeID = (from R in Table1
    join P in Table2
    on R.Id equals P.Id2
    where R.Name == 'blah blah' 
    select R.Id).First() as Guid;

または試してみてください

 Guid SomeID = (Guid) from R in Table1
        join P in Table2
        on R.Id equals P.Id2
        where R.Name == 'blah blah' 
        select R.Id).First();
于 2013-08-21T15:05:02.250 に答える