1

Linqを使用する必要がある WinForms プロジェクトに取り組む予定ですが、それについて何も知らないので、学習を始めたばかりです。

Linq に関するチュートリアルを読んだ後、Microsoft Windows SDK に付属System.Data.Linq.DataContextのツールを使用して作成しました。SqlMetal例として使用しているデータベースは"Northwind"です。

次のように簡単なクエリを作成できました。

Northwind db = new Northwind("Data Source=local;Initial Catalog=Northwind;Integrated Security=True");

var query = from c in db.Customers
            join o in db.Orders on c.CustomerID equals o.CustomerID 
            select new
            {
                Customer_ID = c.CustomerID,
                Customer_Name = c.ContactName,
                Order_ID = o.OrderID
            };

そして、結果を a に表示するDataGridViewと、すべてがうまくいきます。

しかし今、私は解決できていない問題に直面しています。

を作成するために前のクエリを変更しようとしたLEFT OUTER JOINので、次のようにしました。

    var query = from c in db.Customers
            join o in db.Orders on c.CustomerID equals o.CustomerID into j
            from or in j.DefaultIfEmpty()
            select new
            {
                Customer_ID = c.CustomerID,
                Customer_Name = c.ContactName,
                Order_ID = or.OrderID
            };

しかし、これらのデータ セットを表示しようとするとDataGridView、エラーが発生します。

The null value cannot be assigned to a member with type System.Int32 which is a non-nullable value type.

この問題は「注文」を持たない「顧客」が原因であることを知っているため、システムは変数にnull値を代入しようとしintます。

しかし、このエラーが発生しないようにするにはどうすればよいですか?LEFT OUTER JOIN

前もって感謝します。

4

2 に答える 2

0

私はちょうど答えを見つけたと思います:

var query = from c in db.Customers
            join o in db.Orders on c.CustomerID equals o.CustomerID into j1
            from or in j1.DefaultIfEmpty()
            select new
            {
                Customer_ID = c.CustomerID,
                Customer_Name = c.ContactName,
                Order_ID = or.OrderID == null ? "[null]" : or.OrderID.ToString()
            };

しかし、誰かがより良い答えを持っているなら、私は感謝します

于 2012-09-12T22:55:12.253 に答える