2011-02-08 22 views
2

LINQクエリでスタックされています。基本的に私は一意のIDキーに関連付けによってリンクされた2つのテーブルを持っています。 1つのテーブルに重複して見えるもの(tblDupes)があり、別のテーブルにはファクトテーブル(tblVouchers)があります。以下のクエリでは、「sum」は機能していますが、FirstorDefaultは機能しません。 '暗黙的に' string '型を' bool 'に変換することはできません。LINQ FirstOrDefaultの問題

var dupeGroups = from d in db.tblDupes 
          group d by d.dupeGroup into g 
          select new 
          { 
           Group = g.Key, 
           TotalVal = g.Sum(v => v.tblVoucher.TransactionAmtDecimal), 
           Vendor = g.FirstOrDefault(x => x.tblVoucher.vendorName) 
          }; 

私はFirstOrDefaultのさまざまな順列を試してきました。最後に置いていました。また、First()も試しました。

ありがとうございます!

答えて

2

FirstOrDefaultへのパラメータは、フィルタリングに使用される述語だと思います。このことができます

var dupeGroups = from d in db.tblDupes 
       group d by d.dupeGroup into g 
       select new { 
        Group = g.Key, 
        TotalVal = g.Sum(v => v.tblVoucher.TransactionAmtDecimal), 
        Vendor = g.Select(x => x.tblVoucher.vendorName).FirstOrDefault() 
       }; 

希望:あなたは、あなたが最初に取得したいフィールドを選択し、このような最初の結果(methinksを)つかむしたいです!

+0

これは完璧です!私はそれを試みました。とても有難い。私はしばらくlinqをやっているし、実際にはもう少し詳細を取得したいと思った:) – Glinkot

+0

問題はありません:)あなたを助けてくれてうれしい! Jon Skeet氏は、オブジェクトにLINQをどのように再実装したのか、40種類のブログ記事があります。http://msmvps.com/blogs/jon_skeet/archive/2010/09/03/reimplementing-linq-to-objects-part -1-introduction.aspxあなたがあえていればそれをチェックしてください...あなたがあいまいかもしれないLINQステートメントのいくつかを明らかにするかもしれません。 – Pwninstein

+0

する!私はそれが「使いやすい」という外観を持っているにもかかわらず、あなたは本当にそれを十分に活用するために起こっていることのナットとボルトを理解する必要があるという気持ちを持っています。 – Glinkot

3

FirstOrDefaultは、述語をとり、Func<T, bool>を意味します。ただし、vendorNameは文字列であるため、x => x.tblVoucher.vendorNameFunc<T, string>を渡しています。 boolの結果は、一致する最初の行を示すことです。たとえば、vendorNameが「foo」に等しい最初の行を見つけるには、x => x.tblVoucher.vendorName == "foo"を渡します。

+0

カークのおかげで、良い説明です。 – Glinkot