0

という名前IssueStatusesのテーブルと、Issues という名前の別のテーブルがあります。Issues にはと がStatusIDありSubStatusID、どちらも、IssueStatuses次のように、 であるかどうかを示す追加のフィールドがあるテーブルからのSubStatusものです。

問題のステータス

  • 問題ステータスID
  • 問題のステータス
  • IsSubStatus

SubStatuses問題の特定のリストのリストを取得しようとしています。SQLでは次のとおりです。

SELECT iss.IssueStatus, COUNT(iss.IssueStatus) AS Total
FROM Issues AS Issues 
INNER JOIN Rooms r ON Issues.RoomID = r.RoomID 
INNER JOIN Locations l ON l.LocationID = r.LocationID 
INNER JOIN Customers c ON l.CustomerID = c.CustomerID 
INNER JOIN (SELECT * FROM IssueStatuses WHERE IsSubStatus = 0) ist ON Issues.IssueStatusID = ist.IssueStatusID 
INNER JOIN (SELECT * FROM IssueStatuses WHERE IsSubStatus = 1) iss ON Issues.IssueSubStatusID = iss.IssueStatusID 
WHERE c.Customer = 'ABC' 
AND l.Location = 'MySite'
GROUP BY iss.IssueStatus

しかし、それをLINQに変換するのに問題があります。望ましい出力は次のようになります。

問題ステータス | 合計
-------------------
オープン15
遅延 25
オンタイム 8

これが私がLINQで試したことです:

var query = from i in Issues
join r in Rooms on i.RoomID equals r.RoomID
join l in Locations on r.RoomID equals l.LocationID
join c in Customers on l.CustomerID equals c.CustomerID
where i.IssueStatusID == (from ist in IssueStatuses
                            where ist.IsSubStatus == false
                            select ist)
&& i.IssueSubStatusID == (from iss in IssueStatuses
                            where iss.IsSubStatus == true
                            select iss)
&& c.Custome == "ABC"
&& l.Location == "MySite"
    group i by i.IssueStatus

LINQPadしかし、次のエラーがスローされるため、それが間違っていることはわかっています。

can't convert int to type Models.IssueStatus

私がする必要があるのはiss.IssueStaus、グループ化に使用することですが、アクセスできません。誰かが私が間違っていることを教えてもらえますか?

4

2 に答える 2

1

これはどうですか(テストされていませんが、近いはずです):

var query = from i in Issues
            join r in Rooms on i.RoomID equals r.RoomID
            join l in Locations on r.LocationID equals l.LocationID
            join c in Customers on l.CustomerID equals c.CustomerID
            join ist in IssueStatuses on i.IssueStatusID equals ist.IssueStatusID
            join iss in IssueStatuses on i.IssueSubStatusID equals iss.IssueStatusID
            where !ist.IsSubStatus && iss.IsSubStatus
                && c.Customer == "ABC"
                && l.Location == "MySite"
            group i by iss.IssueStatus into g
            select new {IssueStatus = g.Key, Total = g.Count()}
于 2013-01-22T17:52:57.753 に答える
0

2 つの内部fromステートメントは、ID ではなくオブジェクトを返します...次のように必要な ID を選択しますist.IssueStatusID

var query = from i in Issues
join r in Rooms on i.RoomID equals r.RoomID
join l in Locations on r.RoomID equals l.LocationID
join c in Customers on l.CustomerID equals c.CustomerID
where (from ist in IssueStatuses
                            where ist.IsSubStatus == false
                            select ist.IssueStatusID).Contains(i.IssusStatusID)
&& (from iss in IssueStatuses
                            where iss.IsSubStatus == true
                            select iss.IssueStatusID).Contains(i.IssueSubStatusID)
&& c.Customer == "ABC"
&& l.Location == "MySite"
    group i by i.IssueStatus
于 2013-01-22T17:47:35.147 に答える