Linq에서 int를 문자열로 변환하는 데 문제가 있습니다.
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 #의 엄격성에 익숙해 질 수 없습니다!
EF v4에서는을 사용할 수 있습니다 SqlFunctions.StringConvert
. int에 대한 과부하가 없으므로 두 배 또는 소수로 캐스트해야합니다. 코드는 다음과 같이 보입니다.
var items = from c in contacts
select new ListItem
{
Value = SqlFunctions.StringConvert((double)c.ContactId).Trim(),
Text = c.Name
};
쿼리에서 정수를 문자열로 변환하여 비슷한 문제를 해결했습니다. 쿼리를 개체에 넣어서 수행 할 수 있습니다.
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 });
}
LinqToObject : 연락처를 사용하십시오. AsEnumerable ()
var items = from c in contacts.AsEnumerable()
select new ListItem
{
Value = c.ContactId.ToString(),
Text = c.Name
};
SqlFunctions.StringConvert는 작동하지만 번거롭고 대부분 SQL 측에서 문자열 변환을 수행 할 필요가 없습니다.
What I do if I want to do string manipulations is perform the query in linq-to-entities first, then manipulate the stings in linq-to-objects. In this example, I want to obtain a set of data containing a Contact's fullname, and ContactLocationKey, which is the string concatination of two Integer columns (ContactID and LocationID).
// perform the linq-to-entities query, query execution is triggered by ToArray()
var data =
(from c in Context.Contacts
select new {
c.ContactID,
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();
Now, I grant that it does get cumbersome to have to write two anonymous selects, but I would argue that is outweighed by the convenience of which you can perform string (and other) functions not supported in L2E. Also keep in mind that there is probably a performance penalty using this method.
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();
}
}
var selectList = db.NewsClasses.ToList<NewsClass>().Select(a => new SelectListItem({
Text = a.ClassName,
Value = a.ClassId.ToString()
});
Firstly, convert to object, then toString() will be correct.
Brian Cauthon's answer is excellent! Just a little update, for EF 6, the class got moved to another namespace. So, before EF 6, you should include:
System.Data.Objects.SqlClient
If you update to EF 6, or simply are using this version, include:
System.Data.Entity.SqlServer
By including the incorrect namespace with EF6, the code will compile just fine but will throw a runtime error. I hope this note helps to avoid some confusion.
I ran into this same problem when I was converting my MVC 2 app to MVC 3 and just to give another (clean) solution to this problem I want to post what I did...
IEnumerable<SelectListItem> producers = new SelectList(Services.GetProducers(),
"ID", "Name", model.ProducerID);
GetProducers() simply returns an entity collection of Producers. P.S. The SqlFunctions.StringConvert didn't work for me.
If your "contact" is acting as generic list, I hope the following code works well.
var items = contact.Distinct().OrderBy(c => c.Name)
.Select( c => new ListItem
{
Value = c.ContactId.ToString(),
Text = c.Name
});
Thanks.
Using MySql, the SqlFunctions.StringConvert
didn't work for me. Since I use SelectListItem
in 20+ places in my project, I wanted a solution that work without contorting the 20+ LINQ statements. My solution was to sub-class SelectedListItem
in order to provide an integer setter, which moves type conversion away from LINQ. Obviously, this solution is difficult to generalize, but was quite helpful for my specific project.
To use, create the following type and use in your LINQ query in place of SelectedListItem
and use IntValue in place of Value.
public class BtoSelectedListItem : SelectListItem
{
public int IntValue
{
get { return string.IsNullOrEmpty(Value) ? 0 : int.Parse(Value); }
set { Value = value.ToString(); }
}
}
One more solution:
c.ContactId + ""
Just add empty string and it will be converted to string.
if you use entity framework and you want to make the only int acceptable then you can use this in linq query you can try this
var items = from c in contacts
select new ListItem
{
Value = (int)ContractId
Text = c.Name
};
it will work because using (int) will cast your value to the int so you don't need any conversion for string to int and you get the result you want.
this worked for me in my project i think it would be helpful for you
My understanding is that you have to create a partial class to "extend" your model and add a property that is readonly that can utilize the rest of the class's properties.
public partial class Contact{
public string ContactIdString
{
get{
return this.ContactId.ToString();
}
}
}
Then
var items = from c in contacts
select new ListItem
{
Value = c.ContactIdString,
Text = c.Name
};
var items = from c in contacts
select new ListItem
{
Value = String.Concat(c.ContactId), //This Works in Linq to Entity!
Text = c.Name
};
I found that SqlFunctions.StringConvert((double)c.Age)
did not work for me either the field is of type Nullable<Int32>
Took me a lot of searching over the last few days of trial and error to find this.
I hope this helps a few coders out there.
Can you try:
var items = from c in contacts
select new ListItem
{
Value = Convert.ToString(c.ContactId),
Text = c.Name
};
'Programing' 카테고리의 다른 글
좋은 비속어 필터를 어떻게 구현합니까? (0) | 2020.05.09 |
---|---|
GMail, Yahoo 또는 Hotmail을 사용하여 Java 애플리케이션으로 이메일을 보내려면 어떻게해야합니까? (0) | 2020.05.09 |
Android Studio에서 경고 화면 옵션은 어디에 있습니까? (0) | 2020.05.09 |
grep이 'No such file or directory'오류를 출력하지 않게하려면 어떻게해야합니까? (0) | 2020.05.09 |
언제 ASP.NET MVC에서 비동기 컨트롤러를 사용해야합니까? (0) | 2020.05.09 |