if exists statement in sql to linq if exists statement in sql to linq sql-server sql-server

if exists statement in sql to linq


It can't be done in LINQ2SQL with a single statement as the LINQ syntax and extension methods don't support inserts. The following (assuming a datacontext named db) should do the trick.

 if (!db.Users.Any( u => u.UserName == "michael" )) {      db.Users.InsertOnSubmit( new User { UserName = "michael" } );      db.SubmitChanges(); }


Extension method that implements tvanfosson's solution:

  /// <summary>  /// Method that provides the T-SQL EXISTS call for any IQueryable (thus extending Linq).  /// </summary>  /// <remarks>Returns whether or not the predicate conditions exists at least one time.</remarks>  public static bool Exists<TSource>(this IQueryable<TSource> source, Expression<Func<TSource, bool>> predicate)  {     return source.Where(predicate).Any();  }  /// <summary>  /// Method that provides the T-SQL EXISTS call for any IQueryable (thus extending Linq).  /// </summary>  /// <remarks>Returns whether or not the predicate conditions exists at least one time.</remarks>  public static bool Exists<TSource>(this IQueryable<TSource> source, Expression<Func<TSource, int, bool>> predicate)  {     return source.Where(predicate).Any();  }

The extension method would then be used:

  bool exists = dataContext.Widgets.Exists(a => a.Name == "Premier Widget");

Although the .Where().Any() combination works sufficiently, it does certainly help the logic flow of the code presentation.


Put the Exists code in a static class. e.g. add a class to your project w/ something like:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Linq.Expressions;namespace company.project{   static class LinqExtensions    {        /// <summary>        /// Method that provides the T-SQL EXISTS call for any IQueryable (thus extending Linq).        /// </summary>        /// <remarks>Returns whether or not the predicate conditions exists at least one time.</remarks>        public static bool Exists<TSource>(this IQueryable<TSource> source, Expression<Func<TSource, bool>> predicate)        {            return source.Where(predicate).Any();        }        /// <summary>        /// Method that provides the T-SQL EXISTS call for any IQueryable (thus extending Linq).        /// </summary>        /// <remarks>Returns whether or not the predicate conditions exists at least one time.</remarks>        public static bool Exists<TSource>(this IQueryable<TSource> source, Expression<Func<TSource, int, bool>> predicate)        {            return source.Where(predicate).Any();        }    }}

Don't forget to add the namespace of this class to any other class using it. ;P