@Html.ActionLink(items.name, "Details", "Home", new { id = items.id }, null)
You only need the "@" proceeding something when you want to write the result of it to the html. So it's needed in front of Html.ActionLink but not with the parameters as you're passing those as values, not writing them directly to the html.
When passing the attributes you use what's called an anonymous type (the new { .. } statement) and that needs to be of the format {propNameA = propValueA, propNameB = propbValueB}. Lastly you need to use the right overload for ActionLink that does what you want. The one you want has 5 params, the last one being any html attributes you want on the link, but we don't need any so we supply "null" as the 5th param. If you didn't supply that null then you only have 4 parameters and it uses a different overload where the params mean different things and you won't get what you want. It's a strange quirk of MVC.