I understand where you are coming from Sivakumar, LINQ to SharePoint is a beautiful thing, especially when coming to SharePoint from other development areas EF/Linq to SQL etc.
Unfortunately in my experience it just doesn't work. I have written and deployed solutions using it. Yes it can perform worse than an equivalent CAML query. But the problem I had is that occasionally it doesn't work at all. At random, after a few hours or a few months, it would stop working, requiring an IIS Reset to temporarily resolve. This happened to me at multiple sites and even after multiple support tickets with Microsoft I never found a way to resolve the issue.
So it was back to CAML for me. You can review the CAML generated by your LINQ to SharePoint as a shortcut to learning how it works. I would also suggest one of the available CAML designer programs out there to help you develop and test your queries.
I also always write my CAML queries using LINQ to XML which makes them easier to read/maintain:
SPQuery qry = new SPQuery();
string now = Microsoft.SharePoint.Utilities.SPUtility.CreateISO8601DateTimeFromSystemDateTime(DateTime.Now);
XElement queryXML = new XElement("Where",
new XElement("And",
new XElement("Or",
new XElement("Leq",
new XElement("FieldRef", new XAttribute("Name", "FIT_StartDate")),
new XElement("Value", new XAttribute("Type", "DateTime"), now)
),
new XElement("IsNull",
new XElement("FieldRef", new XAttribute("Name", "FIT_StartDate"))
)
),
new XElement("Or",
new XElement("Geq",
new XElement("FieldRef", new XAttribute("Name", "_EndDate")),
new XElement("Value", new XAttribute("Type", "DateTime"), now)
),
new XElement("IsNull",
new XElement("FieldRef", new XAttribute("Name", "_EndDate"))
)
)
)
);
qry.Query = queryXML.ToString();
qry.Query += "<OrderBy><FieldRef Name='FIT_ItemOrder' Ascending='True' /></OrderBy>";
SPListItemCollection items = theList.GetItems(qry);