Pytanie LINQ Guid toString ()


Cześć, wygląda na to, że powinno działać,

from something in collectionofsomestuff       
select new SelectListItem(){Text = something.Name, Value = something.SomeGuid.ToString(), Selected = false};

Kiedy próbuję to zrobić, to nie działa, daj mi błąd

LINQ to Entities nie rozpoznaje metody metody "System.String ToString ()", a tej metody nie można przetłumaczyć na wyrażenie store.

Czy jest w pobliżu praca?


13
2018-03-25 01:11


pochodzenie


Z którego zakresu pochodzą "Name" i "SomeGuid"? To nie jest jasne. - spender
przepraszam .. czy to jest lepsze? - Sevki


Odpowiedzi:


Nie wszystkie metody CLR mogą być używane z Linq-to-Entities. ToString () wydaje się być jednym z nich.

Spojrzeć na Metoda CLR do mapowania funkcji kanonicznych.

Może spróbuj ustawić GUID do zmiennej łańcuchowej jawnie, poza Linq.

string myGuid = SomeGuid.ToString();

from something in collectionofsomestuff       
select new SelectListItem(){Text = Name, Value = myGuid, Selected = false};

6
2018-03-25 01:20





Możesz uzyskać rekordy w db, a następnie przekształcić je w listę lub tablicę za pomocą ToList () lub ToArray (). Następnie użyj obiektu. Na przykład (jest to LINQ do Entities):

var list = collectionofsomestuff.select(c => c).ToList();
from something in list
select new SelectListItem(){Text = something.Name, Value = something.SomeGuid.ToString(), Selected = false}; 

5
2018-03-11 08:44



Myślę, że to najlepsza odpowiedź. Możesz także użyć .AsQueryable przed dzwonieniem .Select(new SelectListItem(... - user1477388


Nie mówię zbyt dobrze wyrażeń zapytań Linq, ale następujące rzeczy powinny załatwić sprawę:

collectionofsomestuff //here it's LinqToEntities
    .Select(something=>new{something.Name,something.SomeGuid})
    .ToArray() //From here on it's LinqToObjects
    .Select(s=>new SelectListItem()
        {
            Text = s.Name, 
            Value = s.SomeGuid.ToString(), 
            Selected = false
        })

4
2018-03-25 01:26



przepraszam ten sam błąd ... - Sevki
Dokładnie to, czego szukałem. Wielkie dzięki! - defines


Skończyło się na tym, że robiłem foreach

           List<SelectListItem> list  = new List<SelectListItem>();
       foreach (SomeThing something in collectionofsomestuff)
       {
           list.Add(new SelectListItem(){Text = something.Name,Selected = false,Value = something.SomeGuid.ToString()});
       }

to jedyny sposób, w jaki mogłem go uruchomić ... nie było to, co miałem nadzieję zrobić ciężko ...


1
2018-03-25 02:01





Utwórz konstruktor dla SelectListItem, który akceptuje twoją wartość jako Guid i ToString tam. Teraz wywołaj zapytanie tak:

from something in collectionofsomestuff select new SelectListItem(something.Name, something.SomeGuid, false);

1
2018-03-25 02:09





Miałem ten sam problem i zmieniłem definicję obiektu, aby obejść problem. To kompletny hack, ale pozwala mi zapełnić dane bezpośrednio z zapytania:

[DataContract]
public class DeviceInfo
{
    public Guid DeviceGuid
    {
        set
        {
            DeviceID = value.ToString();
        }
    }
    [DataMember]
    public string DeviceID { get; set; }
}

Zapytanie działa tak, jak zostało zaprojektowane, ponieważ ma coś innego, co robi konwersję:

devices.AddRange(from d in ae.UserDevices
                    select new DeviceInfo
                    {
                        DeviceGuid = d.DeviceID
                    }

Sprawia, że ​​obiekt jest trochę bardziej nieprzyzwoity, ale znacznie łatwiej radzi sobie z Guidem w zapytaniu.


1
2018-03-11 21:51