web-dev-qa-db-ja.com

文字列を返すLinq

以下がVendの値を文字列として返さない理由がわかりません。 vendの値を確認すると、次のように表示されます。System.Data.Objects.ObjectQuery``1[System.String]

     string vend = (from vnd in db.Vendors
             where vnd.VendorID == id
             select vnd.VendorName).ToString();

私が販売の価値を見るとき、それは私が期待したものではありません

15
Nate Pet

クエリからIQueryable<String>が返されます。ファーストかシングルか何かが必要です:

string vend = (from vnd in db.Vendors
         where vnd.VendorID == id
         select vnd.VendorName).First().ToString();

ToStringが文字列の場合、VendorNameは必要ありません。

string vend = db.Vendors.Single(vnd => vnd.VendorID == id); // more terse 

First は、セットから最初のレコードを取得し、セットが空の場合は例外をスローします。

FirstOrDefault は、例外なく、予期されるタイプの最初のレコードまたはデフォルトを返します。

Single はセットの最初のレコードを返しますが、セットに複数のレコードがある場合は例外をスローしますまたは、セットが空の場合。

SingleOrDefault は、セットの最初のレコード、または空の場合はタイプのデフォルトを返しますが、空の場合は例外をスローしますセット内の複数のレコードです。

34
Joe

クエリの結果ではなく、クエリ自体でToString()を呼び出しています。試してみてください

string vend = (from vnd in db.Vendors
where vnd.VendorID == id
select vnd.VendorName).First();

これにより、クエリの最初の結果が取得されます。これはすでに文字列である必要があります(VendorNameが文字列であると想定)。したがって、ToString()を呼び出す必要はありません。

7
triangle_man