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 <
ja...@chapman-smith.com> 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:* ozdotnet-boun...@ozdotnet.com [mailto:
> ozdotnet-boun...@ozdotnet.com] *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****
>

Reply via email to