Вопрос по c#, asp.net – Проблема с преобразованием int в строку в Linq для сущностей

196
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 # !!!

Отлично, но как насчет людей, использующих 3.5, нет 4? Тогда что? Ekaterina
.ToString () также не работает для LinqToEF в VB. ИМХО, вид тупой. StingyJack
@StingyJack, проблема в ELINQ (сущности linq 2), потому что он переводит ваш код в SQL, а когда дело доходит до внутреннего запроса ToString, он не знает, как переводить «ToString». в SQL. В отличие от объектов linq 2, когда нет перевода, и все является лямбда-выражениями CLR, он выполняется непосредственно для запрошенных объектов. Shimmy
Error: User Rate Limit Exceeded StingyJack
Error: User Rate Limit Exceededstackoverflow.com/questions/1066760/… Shimmy

Ваш Ответ

15   ответов
1

var items = from c in contacts
        select new ListItem
        {
            Value = (int)ContractId 
            Text = c.Name
        };

Error: User Rate Limit Exceeded
-2
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>

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded...System.String Concat(System.Object) cannot be translated into a store expression...Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
4
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();
            }
        }
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededreturn (from l in db.Customers orderby l.CompanyName select new {Id=l.CustomerID, Name=l.CompanyName}).AsEnumerable().Select(c=> new SelectListItem{Value=c.Id.ToString(), Text = c.Name}).ToList();Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededthisError: User Rate Limit Exceeded Shimmy
Error: User Rate Limit Exceededreturn list.ToList(); !!
-2

public partial class Contact{

   public string ContactIdString
   {
      get{ 
            return this.ContactId.ToString();
      }
   } 
}

затем

var items = from c in contacts
select new ListItem
{
    Value = c.ContactIdString, 
    Text = c.Name
};
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Shimmy
5

// perform the linq-to-entities query, query execution is triggered by ToArray()
var data =
   (from c in Context.Contacts
   select new {
       c.Contac,tID,
       c.FullName,
       c.LocationID
   }).ToArray();

// at this point, the database has been called and we are working in
// linq-to-objects where ToString() is supported
// Key2 is an extra example that wouldn't work in linq-to-entities
var data2 =
   (from c in data
    select new {
       c.FullName,
       ContactLocationKey = c.ContactID.ToString() + "." + c.LocationID.ToString(),
       Key2 = string.Join(".", c.ContactID.ToString(), c.LocationID.ToString())
    }).ToArray();

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

1

Error: User Rate Limit Exceeded

c.ContactId + ""

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded
305

SqlFunctions.StringConvertError: User Rate Limit Exceeded

var items = from c in contacts
            select new ListItem
            {
                Value = SqlFunctions.StringConvert((double)c.ContactId).Trim(),
                Text = c.Name
            };
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededSqlFunctions.StringConvert((double)c.ContactId).Trim()
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
2

контакт & quot; действует как общий список, я надеюсь, что следующий код работает хорошо.

var items = contact.Distinct().OrderBy(c => c.Name)
                              .Select( c => new ListItem
                              {
                                Value = c.ContactId.ToString(),
                                Text = c.Name
                              });

Error: User Rate Limit Exceeded

8

AsEnumerable()

var items = from c in contacts.AsEnumerable()
            select new ListItem
            {
                Value = c.ContactId.ToString(),
                Text = c.Name
            };
Error: User Rate Limit ExceededAsEnumerableError: User Rate Limit ExceededIEnumerableError: User Rate Limit ExceededIQueryableError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededsearchitemError: User Rate Limit Exceeded
3

класс переместился в другое пространство имен. Итак, перед EF 6 вы должны включить:

System.Data.Objects.SqlClient

Error: User Rate Limit Exceeded

System.Data.Entity.SqlServer

Error: User Rate Limit Exceeded

Error: User Rate Limit ExceededyourError: User Rate Limit Exceeded
2

когда преобразовывал свое приложение MVC 2 в MVC 3, и просто для того, чтобы дать другое (чистое) решение этой проблемы, я хочу опубликовать то, что я сделал ...

IEnumerable<SelectListItem> producers = new SelectList(Services.GetProducers(),
    "ID", "Name", model.ProducerID);

Error: User Rate Limit Exceeded

1

SqlFunctions.StringConvertSelectListItemSelectedListItem

SelectedListItem

public class BtoSelectedListItem : SelectListItem
{
    public int IntValue
    {
        get { return string.IsNullOrEmpty(Value) ? 0 : int.Parse(Value); }
        set { Value = value.ToString(); }
    }
}
-6

var items = from c in contacts
        select new ListItem
        {
            Value = Convert.ToString(c.ContactId), 
            Text = c.Name
        };
Error: User Rate Limit Exceeded Shimmy
Error: User Rate Limit Exceeded
12

var items = from c in contacts
            select new 
            {
                Value = c.ContactId,
                Text = c.Name
            };
var itemList = new SelectList();
foreach (var item in items)
{
    itemList.Add(new SelectListItem{ Value = item.ContactId, Text = item.Name });
}

Похожие вопросы