0

linq でサブクエリを実行したいのですが、うまくいきません。:-( Google で回答を検索しましたが、問題の解決方法がわかりません。

これは私のSQLです

string strSQL = @"SELECT a.ident, a.ben1 
                FROM pwdata a 
                WHERE a.iid = (SELECT max(b.iid) FROM pwdata b WHERE b.ident = a.ident)";

それがLinqでやろうとした方法ですが、これは正しい方法ではありません

var query = from i in maxxContext.pwdata
            where i.IID = (SELECT max(b.iid) FROM pwdata b WHERE b.ident = a.ident) 
            orderby i.ident

            select new CompareParts
            {
                PartNumber = i.ident,
                PartName = i.ben1
            };
            return query.ToList().Distinct();

どなたか助けていただけませんか?

4

1 に答える 1

2

LINQ を通常の SQL と混ぜ合わせ始めた理由は明らかではありません。そのようには機能しません。

ただし、これは機能するはずです:

var query = from i in maxxContext.pwdata
            where i.IID == (pwdata.Where(b => b.ident == i.ident)
                                  .Max(b => b.iid))
            orderby i.ident
            select new CompareParts
            {
                PartNumber = i.ident,
                PartName = i.ben1
            };

または、結合を行うこともできます。

var query = from i in maxxContext.pwdata
            join b in pwdata on i.ident equals b.ident into bs
            where i.IID == bs.Max(b => b.iid)
            orderby i.ident
            select new CompareParts
            {
                PartNumber = i.ident,
                PartName = i.ben1
            };
于 2013-03-12T13:01:01.537 に答える