3

次のように、tblExpenses と tblCategories の 2 つのテーブルがあります。

tblExpenses

ID (PK),
Place,
DateSpent,
CategoryID (FK)

tblカテゴリ

ID (PK),
Name

上記の 2 つのテーブルからすべての個別のレコードを取得するために、さまざまな LINQ アプローチを試しましたが、あまり成功しませんでした。UNION と DISTINCT を使用してみましたが、うまくいきませんでした。

上記の 2 つのテーブルは、プロジェクトのモデル セクションで定義されており、SQLite でテーブルが作成されます。グリッドビューに値を表示するには、両方のテーブルからすべての個別のレコードを取得する必要があります。

このタスクを達成するために、いくつかの情報を提供してください。この質問に対する答えを見つけるためにいくつかの調査を行いましたが、私が望んでいたものに近いものは何もありませんでした. この質問が重複していたらすみません。

私が試したUNION、DISTINCTアプローチは次のとおりです。

DISTINCT # ==> 反復値を教えてくれます

(from exp in db.Table<tblExpenses >()
                                   from cat in db.Table<tblCategory>()                                       
                                   select new { exp.Id, exp.CategoryId, exp.DateSpent, exp.Expense, exp.Place, cat.Name }).Distinct();

UNION # ==> UNION の使用中にエラーが発生しました

4

3 に答える 3

3

2つのテーブルを結合すると、ユニオンはすでにdistictを実行していると思います。次のようなものを試すことができます

 var query=(from c in db.tblExpenses select c).Concat(from c in 
            db.tblCategory select c).Distinct().ToList();
于 2013-01-25T07:32:16.013 に答える
1

DISTINCTも選択しているため、常にレコードを取得しtblExpenses.IDます。(同じ ID を持つカテゴリが複数ある場合を除きます。ただし、もちろん、それは本当に、本当に悪い設計になります。 )

LINQ でを作成するときはJOIN、フィールド名とデータ型の両方を同じにする必要があります。フィールドtblExpenses.CategoryIDはヌル可能フィールドですか?

もしそうなら、これを試してくださいJOIN

db.Table<tblExpenses>()
.Join(db.Table<tblCategory>(), 
       exp => new { exp.CategoryId }, 
       cat => new { CategoryId = (int?)cat.ID }, 
       (exp, cat) => new { 
                           exp.Id, 
                           exp.CategoryId, 
                           exp.DateSpent, 
                           exp.Expense, 
                           exp.Place, 
                           cat.Name 
                         })
.Select(j => new { 
                   j.Id, 
                   j.CategoryId, 
                   j.DateSpent, 
                   j.Expense, 
                   j.Place, 
                   j.Name 
                 });
于 2013-01-25T08:19:52.307 に答える
0

このクエリを試すことができます: 次のような

SELECT DISTINCTクエリ:

SELECT DISTINCT Name FROM tblCategory INNER JOIN tblExpenses ON tblCategory.categoryID = tblExpenses.categoryID;

結果を出力フィールドの一意の値に制限します。クエリ結果は更新できません。

または、 次のよう

SELECT DISTINCTROWクエリ:

SELECT DISTINCTROW Name FROM tblCategory INNER JOIN tblExpenses ON tblCategory.categoryID = tblExpenses.categoryID;<br/><br/>

出力フィールドだけでなく、基になるテーブル全体を調べて、一意の行を見つけます。

参照: http://www.fmsinc.com/microsoftaccess/query/distinct_vs_distinctrow/unique_values_records.asp

于 2013-01-25T07:46:34.487 に答える