Click here to Skip to main content
15,884,353 members
Please Sign up or sign in to vote.
1.00/5 (2 votes)
See more:
Hi,

What is the difference between below code? Which on is best?

C#
// 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();


Is there any way to optimize the lamda expression?

Thanks

// code
XML
@{
    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" />

//
Posted
Updated 29-Jan-15 0:59am
v4
Comments
Sergey Alexandrovich Kryukov 29-Jan-15 2:28am    
Want to play the game "find ten differences"? What do you mean by "difference"? :-)
—SA
Rahul Kumar 29-Jan-15 3:47am    
in terms of performance.

1 solution

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900