2010-07-07 204 views
0

我似乎无法在这个转换为LINQ:憋屈LINQ到SQL查询

select stuff 
    FROM history INNER JOIN profiles ON history.username = profiles.username 
    LEFT OUTER JOIN files ON history.fileid = files.filename 
    LEFT OUTER JOIN streams ON streams.identifier = history.fileid 
    LEFT OUTER JOIN galleries ON galleries.identifier = history.fileid, subscribers 
    WHERE stuff 

我有以下的左外连接的例子很难。他们没有解释发生了什么,只是在他们的假设情况下做什么。任何帮助/解释将不胜感激。

下面是我如何开始,最后一行(来自JoinedFiles.DefaultIfEmpty()中的文件)不会让我编译。 '类型推断在电话'SelectMany'中说失败。为什么这么复杂? =(

var x = from h in db.Histories 
    join prof in db.profiles on h.username equals prof.username 
    join files in db.NeebitFiles on h.fileid equals files.filename into JoinedFiles 
    from files in JoinedFiles.DefaultIfEmpty() 
    ...? 

回答

1

是啊,我从来没有多少运气无论是对于加入我做

(from a in db.A 
where ... 
select new 
{ 
    a.whatever, 
    (from b in db.B where B.AID = A.AID select b.value).First(), //first for inner join 
(from c in db.C where C.AID = A.AID select c.value).FirstOrDefault() //firstordefault for outer joins 
} 
+0

我用过这个,不是我所要求的,但我更喜欢它,更容易理解wh在继续。 – Jason 2010-07-07 19:49:22

1

让自己Linqer(www.sqltolinq.com)的副本,它会转化几乎所有的T-SQL语句的LINQ,它不是免费的,但它并不昂贵,而且你有30天的审判。

+0

虽然我很欣赏这极大,它并没有解决我的理解问题。由于寿,我要去试试这个+1 – Jason 2010-07-07 16:15:10