2011-12-07 11 views
0

SQlクエリが正常に動作していますが、LINQに変換していくつかの問題があります。SQLのLINQ変換エラー、それを解決するには?

私の作業SQLクエリ:私はmy own previous questionに基づいて試してみました何

select d.UserID, d.Content, d.UpdateTime 
from DiaryPosts as d 
where d.UserID = 2 
/* friends */ 
Union 
select d.UserID, d.Content, d.UpdateTime 
from DiaryPosts as d 
join Friends as fr 
on d.UserID = fr.FriendID 
where fr.UserID = 2 
/* following */ 
Union 
select d.UserID, d.Content, d.UpdateTime 
from DiaryPosts as d 
join Followers as fl 
on d.UserID = fl.UserID 
where fl.FollowerID = 2 
/* ordenando por UpdateTime desc */ 
order by 3 desc 

var friends = (from u in db.User 
         join f in db.Friends 
         on u.ID equals f.FriendID 
         where f.UserID == userset.ID 
         orderby u.Nickname 
         select new FriendsSet { ID = u.ID, Nickname = u.Nickname, Thumbnail = u.Thumbnail }).ToList(); 

var followers = (from u in db.User 
         join f in db.Followers 
         on u.ID equals f.FollowerID 
         where f.UserID == userset.ID 
         orderby u.Nickname 
         select new FriendsSet { ID = u.ID, Nickname = u.Nickname }).ToList(); 

var diaryPosts = (from d in db.DiaryPosts 
           join e in db.EstadosDeAlma 
           on d.EstadosDeAlmaID equals e.ID 
           join u in db.User 
           on d.UserID equals u.ID 
           where d.UserID == userset.ID 
           select new DiaryPostsSet { 
            PostID = d.ID, 
            EstadoDeAlmaID = e.ID, 
            EstadoDeAlma = e.Title, 
            Author = u.Nickname, 
            Thumbnail = u.Thumbnail, 
            UserID = u.ID, 
            IsDuplicated = d.IsDuplicated, 
            FriendID = d.FriendID, 
            FriendName = u.Nickname, 
            Time = d.UpdateTime, 
            MessagesCount = d.FriendMessages.Count(m => m.DiaryPostsID == d.ID) 
           }).Take(6).ToList(); 

var diaryPostsUnion = diaryPosts.Union(friends).Union(followers).OrderBy(d => d.UpdateTime); 

私が取得エラー:

'System.Collections.Generic.List<MvcWebRole1.Models.DiaryPostsSet>' does not contain a definition for 'Union' and the best extension method overload 'System.Linq.ParallelEnumerable.Union<TSource>(System.Linq.ParallelQuery<TSource>, System.Collections.Generic.IEnumerable<TSource>)' has some invalid arguments 

Instance argument: cannot convert from 'System.Collections.Generic.List<MvcWebRole1.Models.DiaryPostsSet>' to 'System.Linq.ParallelQuery<MvcWebRole1.Models.FriendsSet>' 
+0

クエリ終了時に.toList()を離している可能性がありますか? – Nate

答えて

1

あなたは労働組合へのシーケンスをしようとしています1つのタイプのシーケンスを別のタイプのシーケンスに置き換えます。それは意味をなさない - 労働組合は基本的に同じ種類以上でなければならない。

あなたがここでやろうとしていることは本当に明確ではありませんが、あなたは組合を望んでいないと思います。

ああ、これらのすべてがデータベース内で起こるようにしたい場合は、ToList呼び出しを取り除いてください。

EDIT:さて、それはあなたのLINQクエリは、あなたのSQLクエリに対応して正確にどのように見るのは難しいですが、基本的にはあなたの「選択」の句のようなものでなければなりません:

from d in db.DiaryPosts 
// stuff here 
select new { UserID = d.ID, d.UpdateTime, d.Content } 

それぞれにまったく同じ匿名型を使用しますquery - 同じプロパティ名と型を同じ順序で使用し、Unionメソッドを使用できるはずです。

+0

私のSQLクエリでは、私は必要なすべての結果を得る。私はLINQの新人です、私は私が持っている選択肢を知らない。 –

+0

@RubiaGardini:SQLクエリでは、いくつかのフィールドを選択するだけですか?あなたはLINQで同じことをする必要があります。提案されたクエリで編集します。 –

+0

あなたの答えをありがとうございました。@ジョン・スケート、私はすべてを上手くやっていました。最終的なコードはこのリンクにあります:http://pastebin.com/wvpSfzTm –

関連する問題