Hi,
What is the difference between below code? Which on is best?
objSubjectList.selectedSubjects = (from ss in db.studentSubject
join sub in db.subject on ss.subjectId equals sub.id
where ss.studentId == studentId
select new
{
sub.id,
sub.subjectName
}).AsEnumerable()
.Select(t => new subject
{
id = t.id,
subjectName = t.subjectName
}).ToList();
objSubjectList.selectedSubjects = db.studentSubject.Join(db.subject,ss => ss.subjectId, sub => sub.id,
(ss, sub) => new { ss, sub })
.Where(m => m.ss.studentId == studentId)
.Select(c => new
{
c.sub.id,
c.sub.subjectName
}).AsEnumerable()
.Select(t => new subject
{
id = t.id,
subjectName = t.subjectName
}).ToList();
Is there any way to optimize the lamda expression?
Thanks
// code
@{
ViewBag.Title = "AssignSubjects";
}
<h2>AssignSubjects</h2>
Students: @Html.DropDownList("Student", (List<SelectListItem>)ViewData["StudentList"])
Subjects: @Html.DropDownList("Subject", (List<SelectListItem>)ViewData["SubjectList"])
<div>
<div>
<h4>UnSelected Subjects</h4>
<ul id="UnSelectedSubjects">
</ul>
</div>
<div>
<h4>Selected Subjects</h4>
<ul id="SelectedSubjects">
</ul>
</div>
</div>
<script src="~/Scripts/jquery-1.10.2.js"></script>
<script>
$(document).ready(function () {
$('#Student').bind('change', function (event) {
var stdId = $("#Student :selected").val();
var id = event.target.id;
GetSubjectList(stdId);
});
$('#UnSelectedSubjects').bind('dblclick', function (event) {
var stdId = $("#Student :selected").val();
var subId = event.target.id;
AddSubject(stdId, subId);
});
$('#SelectedSubjects').bind('dblclick', function (event) {
var stdId = $("#Student :selected").val();
var subId = event.target.id;
RemoveSubjectOfStudent(stdId, subId);
});
});
var GetSubjectList = function (stdId) {
$.ajax({
cache: false,
type: "POST",
async: "false",
url: "/Home/GetSubjectByStudent/",
data: { studentId: stdId },
dataType: "json"
}).success(function (result) {
var unSelectedSub = result.unSelectedSubjects;
var selectedSub = result.selectedSubjects;
$('#UnSelectedSubjects').html('');
$('#SelectedSubjects').html('');
for (var i = 0; i < unSelectedSub.length; i++) {
var item = unSelectedSub[i];
$('#UnSelectedSubjects').append('<li id=' + item.id + '>' + item.subjectName + '</li>')
}
for (var i = 0; i < selectedSub.length; i++) {
var item = selectedSub[i];
$('#SelectedSubjects').append('<li id=' + item.id + '>' + item.subjectName + '</li>')
}
});
};
var AddSubject = function (stdId, subId) {
$.ajax({
cache: false,
type: "POST",
async: "false",
url: "/Home/AssignSubjectToStudent/",
data: { studentId: stdId, subjectId: subId },
dataType: "json"
}).success(function (result) {
if (result == "OK") {
GetSubjectList(stdId)
}
});
};
function RemoveSubjectOfStudent(stdId, subId) {
$.ajax({
cache: false,
type: "POST",
async: "false",
url: "/Home/RemoveSubjectOfStudent/",
data: { studentId: stdId, subjectId: subId },
dataType:"json"
}).success(function (result) {
if (result == "OK") {
GetSubjectList(stdId)
}
});
}
</script>
//
public class HomeController : Controller
{
schooldbEntities db;
List<student> studentList = new List<student>();
SubjectList objSubjectList = new SubjectList();
[HttpGet]
public ActionResult RegisterStudent()
{
student objStudent = new student();
return View(objStudent);
}
[HttpPost]
public ActionResult RegisterStudent(student objStudent)
{
try
{
if (ModelState.IsValid)
{
using (db = new schooldbEntities())
{
db.student.Add(objStudent);
var res = db.SaveChanges();
}
}
ViewBag.Result = "Success";
}
catch (Exception)
{
ViewBag.Result = "Failed";
}
return View();
}
[HttpGet]
public ActionResult AddSubject()
{
subject sub = new subject();
return View(sub);
}
[HttpPost]
public ActionResult AddSubject(subject objSubject)
{
try
{
if (ModelState.IsValid)
{
using (db = new schooldbEntities())
{
db.subject.Add(objSubject);
db.SaveChanges();
}
}
ViewBag.Result = "Success";
}
catch (Exception)
{
ViewBag.Result = "Failed";
}
return View();
}
[HttpGet]
public ActionResult AssignSubjects()
{
using (db = new schooldbEntities())
{
ViewData["StudentList"] = db.student.Select(c => new { c.id, c.name }).AsEnumerable().Select(t => new SelectListItem { Value = t.id.ToString(), Text = t.name }).ToList();
ViewData["SubjectList"] = db.subject.Select(c => new { c.id, c.subjectName }).AsEnumerable().Select(t => new SelectListItem { Value = t.id.ToString(), Text = t.subjectName }).ToList();
}
return View();
}
[HttpPost]
public ActionResult GetSubjectByStudent(int studentId)
{
using (db = new schooldbEntities())
{
// LINQ Query
//objSubjectList.selectedSubjects = (from ss in db.studentSubject
// join sub in db.subject on ss.subjectId equals sub.id
// where ss.studentId == studentId
// select new
// {
// sub.id,
// sub.subjectName
// }).AsEnumerable()
// .Select(t => new subject
// {
// id = t.id,
// subjectName = t.subjectName
// }).ToList();
// Lambda Expression
objSubjectList.selectedSubjects = db.studentSubject.Join(db.subject,ss => ss.subjectId, sub => sub.id,
(ss, sub) => new { ss, sub })
.Where(m => m.ss.studentId == studentId)
.Select(c => new
{
c.sub.id,
c.sub.subjectName
}).AsEnumerable()
.Select(t => new subject
{
id = t.id,
subjectName = t.subjectName
}).ToList();
var allSubjects = db.subject.ToList();
objSubjectList.unSelectedSubjects = allSubjects.Where(item => !objSubjectList.selectedSubjects.Any(c => c.id == item.id)).ToList();
}
return Json(objSubjectList, JsonRequestBehavior.AllowGet);
}
[HttpPost]
public ActionResult AssignSubjectToStudent(int studentId, int subjectId)
{
string status = string.Empty;
using (db = new schooldbEntities())
{
db.studentSubject.Add(new studentSubject { studentId = studentId, subjectId = subjectId});
db.SaveChanges();
status = "OK";
}
return Json(status, JsonRequestBehavior.AllowGet);
}
[HttpPost]
public ActionResult RemoveSubjectOfStudent(int studentId, int subjectId)
{
string status = string.Empty;
using (db = new schooldbEntities())
{
var obj = db.studentSubject.Where(c => c.studentId == studentId && c.subjectId == subjectId).FirstOrDefault();
db.studentSubject.Remove(obj);
db.SaveChanges();
status = "OK";
}
return Json(status, JsonRequestBehavior.AllowGet);
}
}
class SubjectList
{
public List<subject> unSelectedSubjects { get; set; }
public List<subject> selectedSubjects { get; set; }
}
//
<connectionstrings>
<add name="NewConnection">
connectionString="Data Source=.;
Initial Catalog=schooldb;
Persist Security Info=True;
User ID=sa;
Password=sql" providerName="System.Data.SqlClient" />
//