var items = from c in contacts
            select new ListItem
            {
                Value = c.ContactId, //Cannot implicitly convert type 'int' (ContactId) to 'string' (Value).
                Text = c.Name
            };
var items = from c in contacts
            select new ListItem
            {
                Value = c.ContactId.ToString(), //Throws exception: ToString is not supported in linq to entities.
                Text = c.Name
            };

有什么办法可以做到吗? 注意,在VB中。NET没有问题,使用第一个代码片段,它的工作只是伟大的,VB是灵活的,我无法习惯c#的严格!!


当前回答

var items = from c in contacts
select new ListItem
{
    Value = String.Concat(c.ContactId), //This Works in Linq to Entity!
    Text = c.Name
};

我发现SqlFunctions.StringConvert((double)c.Age)没有为我工作,字段的类型是Nullable<Int32>

我花了很多时间在过去的几天里反复试验才找到这个。

我希望这能帮助到一些程序员。

其他回答

还有一个解决方案:

c.ContactId + ""

只需添加空字符串,它将被转换为字符串。

var selectList = db.NewsClasses.ToList<NewsClass>().Select(a => new SelectListItem({
    Text = a.ClassName,
    Value = a.ClassId.ToString()
});

首先,转换为对象,然后toString()将是正确的。

你可以试试:

var items = from c in contacts
        select new ListItem
        {
            Value = Convert.ToString(c.ContactId), 
            Text = c.Name
        };

使用LinqToObject: contacts.AsEnumerable()

var items = from c in contacts.AsEnumerable()
            select new ListItem
            {
                Value = c.ContactId.ToString(),
                Text = c.Name
            };
public static IEnumerable<SelectListItem> GetCustomerList()
        {
            using (SiteDataContext db = new SiteDataContext())
            {
                var list = from l in db.Customers.AsEnumerable()
                           orderby l.CompanyName
                           select new SelectListItem { Value = l.CustomerID.ToString(), Text = l.CompanyName };

                return list.ToList();
            }
        }