I am working in asp mvc 3 app. I have a model/entity called History. I have a linq query that returns one value. Depending on what I do, I either get a "Object not set to an instance" error in the controller when the method is called, or I get a "cannot implicitly convert from string to type Models.History." So I am looking for assistance in resolving, do I just need to cast it or something?
Here is the method that gives the 'object not set' error:
public string GetPastAbuseData(int Id)
{
var query = (from h in _DB.History
where h.ApplicantId.Equals(Id)
select h.AbuseComment).FirstOrDefault();
return query.ToString();
}
Controller: vm.HistoryModel.AbuseComment = repo.GetPastAbuseData(Id);
And if I change the method type from string to History I get the 'cannot convert' error:
public History GetPastAbuseData(int Id)
{
return (from h in _DB.History
where h.ApplicantId.Equals(Id)
select h.AbuseComment).SingleOrDefault();
}
Thank you for your time.
Using Select.Single and SingleOrDefault.: table where c.id== id select new { Name = c.Name, }; var query = (from c in db. table where c.id== "Classic id" select new { c. xyz }).
You can use the SingleOrDefault method if you are sure there will be only a single item or null yields from your where condition.
In LINQ, quantifier operators are used to returning a boolean value which shows that whether some or all elements satisfies the given condition.
You are selecting AbuseComment
property (which is string) from HistoryObject
. Thus your code tries to convert string to History
. Just return whole History
entity:
public History GetPastAbuseData(int Id)
{
return (from h in _DB.History
where h.ApplicantId.Equals(Id)
select h).SingleOrDefault();
}
Also in first case query
will be of string type. You don't need to call ToString
on this variable. Even more, when you fall into OrDefault()
case, you will have NullReferenceException
.
public string GetPastAbuseData(int Id)
{
return (from h in _DB.History
where h.ApplicantId.Equals(Id)
select h.AbuseComment).FirstOrDefault();
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With