Hi Greg.
FirstOrDefault() will return 0 for non null Ints, So I'm guessing that
t.Id is an (int).
So you're going to have to do something like this.
List<AB> abs = new List<AB>();
for (int i = 0; i < 10; i++)
{
abs.Add(new AB { Id = i });
}
int? id = null;
IEnumerable<int> output = from t in abs where t.Id == 1000
select t.Id;
if(output.Any())
{
id = output.First();
}
Assert.IsNull(id);
or This.
public static int? FirstOrNull(this IEnumerable<int> query)
{
if (query.Any())
{
return query.First();
}
return null;
}
int? alternative = (from t in abs where t.Id == 1000 select
t.Id).FirstOrNull();
hth.
Davy,
The US Congress voted Pizza sauce a vegetable. Don't even try to convince
me of anything in the states is sane any more!
On Mon, Mar 4, 2013 at 11:20 AM, James Chapman-Smith <
[email protected]> wrote:
> Try this:****
>
> ** **
>
> int? id =****
>
> (from t in things where t.Name == "Foo" select t.Id)****
>
> .ToArray()****
>
> .Concat(new int?[] { null })****
>
> .First();****
>
> ** **
>
> Cheers.****
>
> ** **
>
> James.****
>
> ** **
>
> *From:* [email protected] [mailto:
> [email protected]] *On Behalf Of *Greg Keogh
> *Sent:* Monday, 4 March 2013 18:20
> *To:* ozDotNet
> *Subject:* LINQ select nullable Id****
>
> ** **
>
> Folks, I want to select the int Id of an entity in a DbSet, or int? null
> if it's not found. Like this *wrong* sample:****
>
> ****
>
> int? id = (from t in things where t.Name == "Foo" select
> t.Id).FirstOrDefault();****
>
> ****
>
> In this case I get int zero if there is no match but I want null. Is there
> some way of rearranging this to get an Id or null? Remember that the query
> has to convertible down to SQL.****
>
> ****
>
> Greg K****
>