2012-03-14 189 views
0

我需要這個SQL查詢轉換爲LINQ to SQL和結果返回的IEnumerable:轉換SQL查詢的Linq

select VisualAidName, v.VisualAidID, vs.VisualAidStatusName, 
    br.BrandName, v.IsEnabled, v.VisualAidCode, v.DateApproved, 
    br.BrandID, type, UserFirstName+ ' ' + UserLastName as name, AreaID 
from VisualAids v inner join VisualAidStatus vs 
     on v.VisualAidStatusId = vs.VisualAidStatusId 
    inner join brands br 
     on v.BrandID = br.BrandId 
    inner join VisualAids_Areas_Link vareas 
     on v.VisualAidID = vareas.VisualAidID 
    left join users us 
     on v.Owner = us.UserID 
where 
AreaID IN (
    select areaid 
    from Users inner join Users_Area_Link 
     on Users.UserID = Users_Area_Link.UserID 
    where Users.UserID= 3 
) 

我這樣做:

IEnumerable<Visual_Aid> visualAll = from v in Context.VisualAids 
    join vs in Context.VisualAidStatus on v.VisualAidStatusId equals vs.VisualAidStatusId 
    join br in Context.Brands on v.BrandID equals br.BrandId 
    join us in Context.Users on v.Owner equals us.UserID into vadis 
    from x in vadis.DefaultIfEmpty() 
    select new Visual_Aid() 
    { 
     VisualAid_Name = v.VisualAidName, 
     VisualAid_Id = v.VisualAidID, 
     VisualAid_StatusName = vs.VisualAidStatusName, 
     VisualAid_BrandsName = br.BrandName, 
     VisualAid_IsEnabled = bool.Parse(v.IsEnabled.ToString()), 
     VisualAid_Code = v.VisualAidCode, 
     VisualAid_DateApp = v.DateApproved.ToString() ?? "", 
     VisualAid_BrandId = int.Parse(v.BrandID.ToString()), 
     VisualAid_Type = v.Type, 
     VisualAid_Owner = x.UserID == null ? "" : x.UserFirstName + " " + x.UserLastName 
    }; 

,但我需要做的子查詢的一部分,即我需要包括:

where AreaID IN (
    select areaid from Users inner join Users_Area_Link 
     on Users.UserID = Users_Area_Link.UserID where Users.UserID= 3 
) 

任何人都知道如何?非常感謝你提前

+0

請看看我做了,所以你看如何格式化問題,所以它是可讀的變化。 – 2012-03-14 21:08:40

+0

好的,謝謝Tomas – user1269747 2012-03-15 12:57:22

回答

0

您可以將其添加爲where語句:

....... 
join us in Context.Users on v.Owner equals us.UserID into vadis 
from x in vadis.DefaultIfEmpty() 
where (
     from user in Context.Users 
     join userArea in Users_Area_Link 
      on user.UserID equals userArea.UserID 
     where user.UserID==3 
     select userArea.areaid 
     ).Contains(????.AreaID) 
select new Visual_Aid() 
{ 
.......