{"id":37,"date":"2007-04-25T07:12:43","date_gmt":"2007-04-25T12:12:43","guid":{"rendered":"http:\/\/mariusbancila.ro\/blog\/?p=37"},"modified":"2013-08-13T09:51:16","modified_gmt":"2013-08-13T07:51:16","slug":"linq-to-sql","status":"publish","type":"post","link":"https:\/\/mariusbancila.ro\/blog\/2007\/04\/25\/linq-to-sql\/","title":{"rendered":"LINQ to SQL"},"content":{"rendered":"<p>LINQ to SQL is an API that allows querying relational databases. The samples in this post are based on the concepts of:<\/p>\n<ul>\n<li>Entity classes (which are instances of Entity Types). Such a class is a regular .NET class that is decorated with the attribute Table and its properties and fields with the attribute Column<\/li>\n<li><tt>DataContext<\/tt>, is the channel for doing operations with the database; it is used like an ADO.NET connection; actually its constructor takes either a connection string or an ADO.NET connection<\/li>\n<\/ul>\n<p>Considering the known Winner class from the previous posts, <\/p>\n<pre class=\"csharp\" name=\"code\">\r\npublic class Winner\r\n{\r\n     public string Name { get; set; }\r\n     public string Country { get; set; }\r\n     public int Year { get; set; }\r\n}\r\n<\/pre>\n<p>Decorating it with Table and column like this<\/p>\n<pre class=\"csharp\" name=\"code\">\r\n[Table(Name = \"Winners\")]\r\npublic class Winner\r\n{\r\n    [Column]\r\n    public string Name { get; set; }\r\n\r\n    [Column]\r\n    public string Country { get; set; }\r\n\r\n    [Column(IsPrimaryKey = true)]\r\n    public int Year { get; set; }\r\n}\r\n<\/pre>\n<p>will create a direct mapping between <tt>Winner<\/tt> and the table call Winners, and between the fields Name, Country and Year of the class and the columns with the same name from the table. Both <tt>Table<\/tt> and <tt>Column<\/tt> have several properties. One of them is <tt>Name<\/tt>, which specifies the actual name of the table or column corresponding to the class or property. If the property <tt>Name<\/tt> is not specified, the same name as for the class and properties is used.<\/p>\n<p>Assuming we have a SQL Server database, located at C:\\Program Files\\Microsoft SQL Server\\MSSQL.1\\MSSQL\\Data\\UCL.mdf, with a table Winners that has three columns Year (which is also the primary key), Name and Country, and that this table is populated with the winners of UEFA Champions League, we could write the following code to retrieve and show the winners:<\/p>\n<pre class=\"csharp\" name=\"code\">\r\npublic void PrintWinners()\r\n{\r\n     \/\/ creates a data context that takes the path of the database\r\n     DataContext dc = new DataContext(@\"C:\\Program Files\\Microsoft SQL Server\\MSSQL.1\\MSSQL\\Data\\UCL.mdf\");\r\n\r\n     \/\/ retrieves a Table of Winner\r\n     Table&lt;Winner&gt; winners = dc.GetTable&lt;Winner&gt;();\r\n\r\n     \/\/ creates a sequence of winners ordered descending by the winning year\r\n     var result = from w in winners\r\n                  orderby w.Year descending\r\n                  select w;\r\n\r\n     \/\/ prints the sequence of winners\r\n     foreach (var w in result)\r\n     {\r\n          Console.WriteLine(\"{0} {1}, {2}\",\r\n          w.Year, w.Name, w.Country);\r\n     }\r\n}\r\n<\/pre>\n<p>First, we must instantiate a <tt>DataContext<\/tt>, passing as argument the path to the database. <tt>DataContext<\/tt> has a method <tt>GetTable()<\/tt>, that returns a <tt>Table&lt;T&gt;<\/tt>. To get the winners we call it as shown above. On this table, we can perform a query and show the results:<\/p>\n<pre class=\"console\">\r\n2006 Barcelona, Spain\r\n2005 Liverpool, England\r\n2004 FC Porto, Portugal\r\n2003 AC Milan, Italy\r\n2002 Real Madrid, Spain\r\n2001 Bayern Munchen, Germany\r\n2000 Real Madrid, Spain\r\n1999 Manchester Utd., England\r\n1998 Real Madrid, Spain\r\n1997 Borussia Dortmund, Germany\r\n1996 Juventus, Italy\r\n1995 AFC Ajax, Netherlands\r\n1994 AC Milan, Italy\r\n1993 Olympique de Marseille, France\r\n<\/pre>\n<p>It is however recommended that we use a so called strongly-typed version of <tt>DataContext<\/tt>. In other words, a derived class from <tt>DataContext<\/tt> that keeps as members all the table collections. In this case we don&#8217;t have to call directly <tt>GetTable&lt;&gt;()<\/tt>.<\/p>\n<pre class=\"csharp\" name=\"code\">\r\npublic class UCLDataContext : DataContext\r\n{\r\n    public Table&lt;Winner&gt; Winners;\r\n\r\n    public UCLDataContext(string connection)\r\n      :\r\n      base(connection)\r\n    {}\r\n}\r\n<\/pre>\n<p>The <tt>PrintWinnes<\/tt> function would have to change to:<\/p>\n<pre class=\"csharp\" name=\"code\">\r\npublic void PrintWinners()\r\n{\r\n    \/\/ creates a data context that takes the path of the database\r\n    UCLDataContext dc = new UCLDataContext(@\"C:\\Program Files\\Microsoft SQL Server\\MSSQL.1\\MSSQL\\Data\\UCL.mdf\");\r\n\r\n    \/\/ creates a sequence of winners ordered descending by the winning year\r\n    var result = from w in dc.Winners\r\n                 orderby w.Year descending\r\n                 select w;\r\n\r\n    \/\/ prints the sequence of winners\r\n    foreach (var w in result)\r\n    {\r\n        Console.WriteLine(\"{0} {1}, {2}\",\r\n            w.Year, w.Name, w.Country);\r\n    }\r\n}\r\n<\/pre>\n<p>Only querying the database is not enough. <tt>DataContext<\/tt> also allow us to submit changes to the database.<\/p>\n<p>The following function shows how to add a winner to the table Winners:<\/p>\n<pre class=\"csharp\" name=\"code\">\r\npublic void AddWinner()\r\n{\r\n     \/\/ creates a data context that takes the path of the database\r\n     UCLDataContext dc = new UCLDataContext(@\"C:\\Program Files\\Microsoft SQL Server\\MSSQL.1\\MSSQL\\Data\\UCL.mdf\");\r\n\r\n     \/\/ adds a new winner to the table\r\n     dc.Winners.Add(new Winner { Name = \"Manchester United\", Country = \"England\", Year = 2007});\r\n\r\n     \/\/ submites the changes\r\n     dc.SubmitChanges();\r\n}\r\n<\/pre>\n<p>If you want for instance to remove all the winners from Spain, we can do the following:<\/p>\n<pre class=\"csharp\" name=\"code\">\r\npublic void DeleteWinner()\r\n{\r\n    \/\/ creates a data context that takes the path of the database\r\n    UCLDataContext dc = new UCLDataContext(@\"C:\\Program Files\\Microsoft SQL Server\\MSSQL.1\\MSSQL\\Data\\UCL.mdf\");\r\n\r\n    \/\/ remove a sequence of winners\r\n    dc.Winners.RemoveAll(from w in dc.Winners\r\n                      where w.Country == \"Spain\"\r\n                      select w);\r\n\r\n    \/\/ submites the changes\r\n    dc.SubmitChanges();\r\n}\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>LINQ to SQL is an API that allows querying relational databases. The samples in this post are based on the concepts of: Entity classes (which are instances of Entity Types). Such a class is a regular .NET class that is decorated with the attribute Table and its properties and fields with the attribute Column DataContext, &#8230; <a title=\"LINQ to SQL\" class=\"read-more\" href=\"https:\/\/mariusbancila.ro\/blog\/2007\/04\/25\/linq-to-sql\/\" aria-label=\"Read more about LINQ to SQL\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","advgb_blocks_editor_width":"","advgb_blocks_columns_visual_guide":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[11,14],"tags":[454,451,328,279],"class_list":["post-37","post","type-post","status-publish","format-standard","hentry","category-csharp","category-linq","tag-net","tag-c","tag-linq-2","tag-sql"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Marius Bancila\"\/>\n\t<meta name=\"keywords\" content=\".net,c++,linq,sql\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/mariusbancila.ro\/blog\/2007\/04\/25\/linq-to-sql\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Marius Bancila&#039;s Blog | About code. Mostly on C++\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"LINQ to SQL\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/mariusbancila.ro\/blog\/2007\/04\/25\/linq-to-sql\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2007-04-25T12:12:43+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2013-08-13T07:51:16+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"LINQ to SQL\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2007\\\/04\\\/25\\\/linq-to-sql\\\/#article\",\"name\":\"LINQ to SQL\",\"headline\":\"LINQ to SQL\",\"author\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#organization\"},\"datePublished\":\"2007-04-25T07:12:43+02:00\",\"dateModified\":\"2013-08-13T09:51:16+02:00\",\"inLanguage\":\"en-US\",\"commentCount\":1,\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2007\\\/04\\\/25\\\/linq-to-sql\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2007\\\/04\\\/25\\\/linq-to-sql\\\/#webpage\"},\"articleSection\":\"C#, LINQ, .NET, C++, linq, SQL\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2007\\\/04\\\/25\\\/linq-to-sql\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/#listItem\",\"name\":\"IT\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/#listItem\",\"position\":2,\"name\":\"IT\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/#listItem\",\"name\":\"Software\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/#listItem\",\"position\":3,\"name\":\"Software\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/#listItem\",\"name\":\".NET\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/#listItem\",\"name\":\"IT\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/#listItem\",\"position\":4,\"name\":\".NET\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/csharp\\\/#listItem\",\"name\":\"C#\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/#listItem\",\"name\":\"Software\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/csharp\\\/#listItem\",\"position\":5,\"name\":\"C#\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/csharp\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2007\\\/04\\\/25\\\/linq-to-sql\\\/#listItem\",\"name\":\"LINQ to SQL\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/#listItem\",\"name\":\".NET\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2007\\\/04\\\/25\\\/linq-to-sql\\\/#listItem\",\"position\":6,\"name\":\"LINQ to SQL\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/csharp\\\/#listItem\",\"name\":\"C#\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#organization\",\"name\":\"Marius Bancila's Blog\",\"description\":\"About code. Mostly on C++\",\"url\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/#author\",\"url\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/\",\"name\":\"Marius Bancila\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2007\\\/04\\\/25\\\/linq-to-sql\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a84dd2831d955c38355ddea55df4df260809b88f36408bc14fd4eab8f7f131c9?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Marius Bancila\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2007\\\/04\\\/25\\\/linq-to-sql\\\/#webpage\",\"url\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2007\\\/04\\\/25\\\/linq-to-sql\\\/\",\"name\":\"LINQ to SQL\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2007\\\/04\\\/25\\\/linq-to-sql\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/#author\"},\"datePublished\":\"2007-04-25T07:12:43+02:00\",\"dateModified\":\"2013-08-13T09:51:16+02:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/\",\"name\":\"Marius Bancila's Blog\",\"description\":\"About code. Mostly on C++\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"LINQ to SQL","description":"","canonical_url":"https:\/\/mariusbancila.ro\/blog\/2007\/04\/25\/linq-to-sql\/","robots":"max-image-preview:large","keywords":".net,c++,linq,sql","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/mariusbancila.ro\/blog\/2007\/04\/25\/linq-to-sql\/#article","name":"LINQ to SQL","headline":"LINQ to SQL","author":{"@id":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/#author"},"publisher":{"@id":"https:\/\/mariusbancila.ro\/blog\/#organization"},"datePublished":"2007-04-25T07:12:43+02:00","dateModified":"2013-08-13T09:51:16+02:00","inLanguage":"en-US","commentCount":1,"mainEntityOfPage":{"@id":"https:\/\/mariusbancila.ro\/blog\/2007\/04\/25\/linq-to-sql\/#webpage"},"isPartOf":{"@id":"https:\/\/mariusbancila.ro\/blog\/2007\/04\/25\/linq-to-sql\/#webpage"},"articleSection":"C#, LINQ, .NET, C++, linq, SQL"},{"@type":"BreadcrumbList","@id":"https:\/\/mariusbancila.ro\/blog\/2007\/04\/25\/linq-to-sql\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog#listItem","position":1,"name":"Home","item":"https:\/\/mariusbancila.ro\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/#listItem","name":"IT"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/#listItem","position":2,"name":"IT","item":"https:\/\/mariusbancila.ro\/blog\/category\/it\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/#listItem","name":"Software"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/#listItem","position":3,"name":"Software","item":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/#listItem","name":".NET"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/#listItem","name":"IT"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/#listItem","position":4,"name":".NET","item":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/csharp\/#listItem","name":"C#"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/#listItem","name":"Software"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/csharp\/#listItem","position":5,"name":"C#","item":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/csharp\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/2007\/04\/25\/linq-to-sql\/#listItem","name":"LINQ to SQL"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/#listItem","name":".NET"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/2007\/04\/25\/linq-to-sql\/#listItem","position":6,"name":"LINQ to SQL","previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/csharp\/#listItem","name":"C#"}}]},{"@type":"Organization","@id":"https:\/\/mariusbancila.ro\/blog\/#organization","name":"Marius Bancila's Blog","description":"About code. Mostly on C++","url":"https:\/\/mariusbancila.ro\/blog\/"},{"@type":"Person","@id":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/#author","url":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/","name":"Marius Bancila","image":{"@type":"ImageObject","@id":"https:\/\/mariusbancila.ro\/blog\/2007\/04\/25\/linq-to-sql\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/a84dd2831d955c38355ddea55df4df260809b88f36408bc14fd4eab8f7f131c9?s=96&d=mm&r=g","width":96,"height":96,"caption":"Marius Bancila"}},{"@type":"WebPage","@id":"https:\/\/mariusbancila.ro\/blog\/2007\/04\/25\/linq-to-sql\/#webpage","url":"https:\/\/mariusbancila.ro\/blog\/2007\/04\/25\/linq-to-sql\/","name":"LINQ to SQL","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/mariusbancila.ro\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/mariusbancila.ro\/blog\/2007\/04\/25\/linq-to-sql\/#breadcrumblist"},"author":{"@id":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/#author"},"creator":{"@id":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/#author"},"datePublished":"2007-04-25T07:12:43+02:00","dateModified":"2013-08-13T09:51:16+02:00"},{"@type":"WebSite","@id":"https:\/\/mariusbancila.ro\/blog\/#website","url":"https:\/\/mariusbancila.ro\/blog\/","name":"Marius Bancila's Blog","description":"About code. Mostly on C++","inLanguage":"en-US","publisher":{"@id":"https:\/\/mariusbancila.ro\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"Marius Bancila's Blog | About code. Mostly on C++","og:type":"article","og:title":"LINQ to SQL","og:url":"https:\/\/mariusbancila.ro\/blog\/2007\/04\/25\/linq-to-sql\/","article:published_time":"2007-04-25T12:12:43+00:00","article:modified_time":"2013-08-13T07:51:16+00:00","twitter:card":"summary","twitter:title":"LINQ to SQL"},"aioseo_meta_data":{"post_id":"37","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"location":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2021-03-18 21:04:51","updated":"2025-12-12 07:09:06","seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"author_meta":{"display_name":"Marius Bancila","author_link":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/"},"featured_img":null,"jetpack_publicize_connections":[],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"Marius Bancila","author_link":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/"},"uagb_comment_info":1,"uagb_excerpt":"LINQ to SQL is an API that allows querying relational databases. The samples in this post are based on the concepts of: Entity classes (which are instances of Entity Types). Such a class is a regular .NET class that is decorated with the attribute Table and its properties and fields with the attribute Column DataContext,&hellip;","coauthors":[],"tax_additional":{"categories":{"linked":["<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/csharp\/\" class=\"advgb-post-tax-term\">C#<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/linq\/\" class=\"advgb-post-tax-term\">LINQ<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">C#<\/span>","<span class=\"advgb-post-tax-term\">LINQ<\/span>"]},"tags":{"linked":["<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/linq\/\" class=\"advgb-post-tax-term\">.NET<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/linq\/\" class=\"advgb-post-tax-term\">C++<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/linq\/\" class=\"advgb-post-tax-term\">linq<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/linq\/\" class=\"advgb-post-tax-term\">SQL<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">.NET<\/span>","<span class=\"advgb-post-tax-term\">C++<\/span>","<span class=\"advgb-post-tax-term\">linq<\/span>","<span class=\"advgb-post-tax-term\">SQL<\/span>"]}},"comment_count":"1","relative_dates":{"created":"Posted 19 years ago","modified":"Updated 13 years ago"},"absolute_dates":{"created":"Posted on April 25, 2007","modified":"Updated on August 13, 2013"},"absolute_dates_time":{"created":"Posted on April 25, 2007 7:12 am","modified":"Updated on August 13, 2013 9:51 am"},"featured_img_caption":"","series_order":"","jetpack_shortlink":"https:\/\/wp.me\/pYNdv-B","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/posts\/37","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/comments?post=37"}],"version-history":[{"count":2,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/posts\/37\/revisions"}],"predecessor-version":[{"id":1618,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/posts\/37\/revisions\/1618"}],"wp:attachment":[{"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/media?parent=37"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/categories?post=37"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/tags?post=37"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}