2017-07-14 14 views
2

私はC#とLINQで非常に初心者であり、必要なクエリやコードを設計できませんでした。私はここで、Microsoftのドキュメント、C#を一言で研究し、多くを学んだが、適切にそれを適用するように見えることはできません。LINQクエリが別のテーブルと一致することに基づいて1つのテーブルから返す

データソースはSQL Expressで、5つの小さなシンプルテーブルです。私は自分のために明確にするために、少し進歩的なデザインで巻いた。私はEmployeeテーブルEmployee.ID - > MeetingDetail.PartnerIDに関連するプロパティint PartnerIDを持つMeetingDetail型を持っています。私は新しいタイプに、このマッチに基づいてパートナーの名前のプロパティを含めることを望みます。ソースのプロパティはdb.Employees.LastNameとFirstNameです。どちらもString型です。

var filtered = db.MeetingDetails.Where(v => v.GroupID == ID); 

var recentMeetingRowQuery = from meeting in filtered 
select new 
{ 
    Date = meeting.MeetingDate, 
    Category = meeting.Category.Name, 
    Partner = (db.Employees.Where(v => v.ID == meeting.PartnerID).Select(x => x.LastName)) 
}; 

パートナープロパティの間違った種類を返していると私はさまざまな方法でtoString()を試してみたようです。

enter image description here

+1

'db.Employees.Where(V => v.ID == meeting.PartnerID)' ' – Fabio

+0

V => ID == meeting.PartnerID'は、返信用 –

+0

感謝をフィルタリングするため' v'パラメータを使用していません@ファビオ!私はPartner =式でコードを試しましたが、戻り値の型はEmployeeですが、そのプロパティから文字列が必要です。おもう。 – gnivler

答えて

2

使用2つのテーブルのレコードを一致させるためにに参加:

var recentMeetingRowQuery = 
     from meeting in db.MeetingDetails.Where(m => m.GroupID == ID) 
     join employee in db.Employees on meeting.PartnerID equals employee.ID 
     select new { 
      Date = meeting.MeetingDate, 
      Category = meeting.Category.Name, 
      Partner = employee.LastName 
     }; 

注:私はあなたが実際にv => v.ID == meeting.PartnerIDあるべきマッチングとv => ID == meeting.PartnerIDのための従業員IDを使用していると仮定。


パートナープロパティ

Select(x => x.LastName)ため、戻りIQueryable<string>のための間違った種類を返しているようです。 .FirstOrDefault()を追加することで最初に一致した従業員名のみを選択できますが、結合はより効率的なソリューションです。

+1

あなたは、比較の問題についての注意が正確です - あなたが述べたようにv.IDでなければなりません – gnivler

関連する問題