谁能帮我把这个MySQL语句转换成Linq lambda?

时间:2015-09-18 15:35:15

标签: c# mysql linq lambda

我需要帮助将此查询转换为linq。

select Title from titles
INNER JOIN UserTitles on UserTitles.TitleId = titles.TitleId
where UserTitles.UserId = currentUserId

这样我就可以循环用户标题:

示例:姓名,BS,BA,PHD

当我有这些表时:

用户:

+---------------+----------+
| currentUserId | UserName |
+---------------+----------+
|             1 | Dave     |
+---------------+----------+

标题

+---------+-------+
| TitleId | Title |
+---------+-------+
|       1 | BS    |
|       2 | MD    |
|       3 | PHD   |
|       4 | BA    |
+---------+-------+

UserTitles:

+--------+---------+
| UserId | TitleId |
+--------+---------+
|      1 |       1 |
|      1 |       2 |
|      1 |       3 |
|      1 |       4 |
+--------+---------+

修改

在我的控制器中我有这个:

IEnumerable<String> thisresult = _contentService.Titles
.Join(_contentService.UserTitles.Where(x => x.UserId == currentUserId),
t => t.Id,
ut => ut.TitleId,
(t, ut) => t.TitleString);

var model = new ManageUserViewModel()
        {
            Titlelist = thisresult
        };


        return View(model);

在我的ViewModel中,我有这个:

public IEnumerable<String> Titlelist { get; set; }

在我的视图中我有这个:

@foreach (var title in Model.Titlelist)
            {
                @Html.Raw(title)
            }

我明白了:

'/'应用程序中的服务器错误。 不支持指定的方法。

1 个答案:

答案 0 :(得分:0)

var result=db.titles
  .Join(db.UserTitles.Where(x => x.UserId == currentUserId),
    t=>t.TitleId,
    ut=>ut.TitleId,
    (t,ut)=>ut.Title);

如果使用Entity Framework,正确设置Users,并使用具有相应导航属性的Titles表,那么它将是:

var result=db.Users
  .Where(u=>u.UserId == currentUserId)
  .Select(u=>u.Titles);