我希望使用 linq to sql 查询,然后将其转换为不同值的字典。键和值都来自查询。
var model = db.LANDGRID_PLSS_SECTIONS
.Select(x => new {x.MERIDIAN_CODE,x.MERIDIAN})
.ToDictionary(kvp=> kvp.MERIDIAN_CODE as string, kvp=> kvp.MERIDIAN as string)
.Distinct();
Run Code Online (Sandbox Code Playgroud)
这会返回一个异常,表明具有该值的项键已存在。
这本字典需要是类型Dictionary<string,string>
更新
在表中,MERIDIAN_CODE 将始终具有相同的 MERIDIAN 值。然而,它确实在表中出现了多次。Meridian 是代码的用户友好版本。我需要在视图中使用两者。
我在另一个LINQ语句中有这个代码块.
VideoLinks = (from video in m.VideoLinks.DefaultIfEmpty(new VideoGallery())
orderby video.CreatedDate
select new VideoGallery()
{
Source = video.Source,
Type = video.Type,
Links = video.Links,
Title = video.Title
}).ToList()
Run Code Online (Sandbox Code Playgroud)
不幸的是,如果不使用DefaultIfEmpty它通过我一个例外.如果我使用DefaultIfEmpty,即使m.VideoLinks为null,我也会为视频链接计数为1.
那么现在如果m.VideoLinks为null,如何避免计数1
我有一个带有日期字段和时间字段的表.我想检索按月份分组的结果集以及该月份内出现的记录数.如何在LINQ中完成?像这样的东西.
数据.
10/10/2011 00:00:10:000
10/11/2011 00:00:20:000
11/01/2011 00:00:10:000
11/10/2011 00:00:40:000
我想要检索
10/1/2011 00:00:30:000
11/1/2011 00:00:50:000
谢谢你的帮助.
我尝试这样的事情.
var monthely =
from u in sqlDataContract.TimeTrickTables
group u by u.EntryDate.Value.Month into g
select new
{
EntryDate = g.Key,
ETime = g.Aggregate(TimeSpan.Zero, (subtotal, t) => subtotal.Add((TimeSpan)t.ETime))
};
Run Code Online (Sandbox Code Playgroud)
但它抛出此异常 不支持查询运算符'Aggregate'
我的代码中有一个必须具有void返回类型的方法,它只能采用一个特定的参数.我需要从中归还一些东西.
为您提供详细信息:我有一个WCF服务,它具有SQL服务器访问权限.它有一个名为SQLMetal.exe的程序生成的代码.这给了我一个部分方法的部分类(DataContext).我正在构建这个partial类的另一部分,这些部分方法就像'InsertUser'或'DeleteUser'.它们没有在partial类的其他部分实现,但我想这意味着我必须实现它们.这很好,但是如果它们是部分方法,它们必须有一个void返回类型.
那么如果我想从其中一个中返回一些内容怎么办?我的意思是,应用程序可以连接到此服务,并可以使用它来访问数据库信息.该应用程序需要知道服务端是否存在错误.
所以它是一个带有void返回类型和一组预定义参数的部分方法.
该怎么办?
编辑:更多细节!
首先,为什么我不能改变生成的代码?嗯,这是一个很好的建议,但我对此表示担忧.它生成的原因是为了在数据库发生变化并且必须重新生成代码时尽量减少未来的编码问题.
其次,一些代码:
[System.Data.Linq.Mapping.DatabaseAttribute(Name = "HVD01")]
public partial class HydraDataContext : System.Data.Linq.DataContext
{
private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMappingSource();
#region Extensibility Method Definitions
partial void OnCreated();
partial void InsertClient(Client instance);
partial void UpdateClient(Client instance);
Run Code Online (Sandbox Code Playgroud)
这就是生成代码的相关部分.
那是我的一部分.这是另一个与生成的部分结合的部分类.
public void UpdateClient(Client client)
{
//Primary key can't be zero
if (client.ClientID == 0)
return;
dc.Clients.Attach(client, true);
dc.SubmitChanges();
}
Run Code Online (Sandbox Code Playgroud)
显然,有可能需要返回的东西.
异常怎么样?好吧,如果我在WCF服务上抛出一个,我认为应用程序不会得到它(我可能在这里错了).该应用程序使用该服务,但我不认为在该服务上抛出异常将到达消费应用程序.是吗?
也许只是改变功能是最好的.我只是想到了重点是尽可能多地保留生成的代码,以防你需要重新生成它.
再次感谢.
我有一些看起来像这样的查询:
public List<AnObjectModel> GetObjectFromDB(TheParameters)
{
using MyDataContext
{
var TheList = (....select new AnObjectModel()...).ToList();
return new List<AnObjectModel>(TheList);
}
}
Run Code Online (Sandbox Code Playgroud)
他们工作得很好.我的问题是:目前,我正在使用var,然后我正在进行演员表演.这样做会有任何性能上的好处吗?
public List<AnObjectModel> GetObjectFromDB(TheParameters)
{
using MyDataContext
{
List<AnObjectModel> TheList = (....select new AnObjectModel()...).ToList();
return TheList;
}
}
Run Code Online (Sandbox Code Playgroud)
我需要大约20分钟来做出改变,我想知道是否会有任何不同.
谢谢.
我是C#和Visual studio的新手.我在Visual Studio上有一个完美的C#项目代码.但是,我需要对数据库和代码进行一些更改.删除表A中的两列 - Col1,Col2,将它们添加到表B并相应地更改业务逻辑.我有一个.dbml文件,它定义了数据库表和代码之间的映射.在构建代码时,是否从.dbml文件自动生成designer.cs文件?如果不是,我该如何生成这些文件?如果我要删除表中的列 - 我需要更改哪些相应的文件(dbml/designer.cs)?这可能是天真的,但我不确定这些文件是如何连接到数据库的.
我有两个清单
var stores = new[]
{
new { Code = 1, Name = "Store 1" },
new { Code = 2, Name = "Store 2" }
};
var orders = new[]
{
new { Code = 1, StoreCode = 1, TotalValue = 4.12 },
new { Code = 2, StoreCode = 1, TotalValue = 14.12 },
new { Code = 3, StoreCode = 1, TotalValue = 24.12 }
};
Run Code Online (Sandbox Code Playgroud)
输出需要
StoreName =商店1 | TotalValue = 38.24
LINQ to SQL LINQ …
我正在研究LINQ,尤其是MSDN上的LINQ to SQL,并且遇到了这个例子,除非有一些聪明的魔术,否则看起来像是一个极其牺牲计算资源而不是代码可读性的情况.
int highScoreCount =
(from score in scores
where score > 80
select score)
.Count();
Run Code Online (Sandbox Code Playgroud)
有人请告诉我,此查询不会加载列表中的所有分数只是为了得到他们的计数.甚至不是80分以上的分数.
如果是这个特定查询的情况,是否有人要更改它以避免加载完整的分数列表?比如"选择(计数)得分".
谢谢.
编辑:我为懒惰而道歉,并没有想办法先查看生成的SQL.我发现最简单的方法是使用LinqPad
我有以下数据库表,其中主题和评论之间的关系是 1:N
Category
id
name
Topic
id
title
category_id
Comment
id
details
topic_id
deleted (boolean)
Run Code Online (Sandbox Code Playgroud)
我想要一个查询来计算每个类别中的评论总数。我有以下 LINQ 查询,但它不起作用:
@foreach (var cat in Model.AllPermissionSets.Keys)
{
var commentCount = cat.Topics.Where(c => c.Comments.deleted != 0).SelectMany(x => x.Comments).Count();
@* some other stuff *@
}
Run Code Online (Sandbox Code Playgroud)
在 Visual Studio 中我收到错误IList<Comment> doesn not contain a definition for deleted...
执行上述操作的正确语法是什么?
我想知道是否可以从具有日期创建列的表中获取所有记录,使用linqtosql或linq返回所有那些日期为星期一的记录?如何实现这一目标.
var callRecords =
mCallCompletionsQueryable.Where(
x =>
x.DateCreatedUTC.Value.Date.ToString("dddd") == "Monday").ToList();
Run Code Online (Sandbox Code Playgroud) 我有ToList()方法的问题,基本上我正在尝试创建一个函数,它将返回一个var linq查询转换为列表,这里是函数.
List<UsersTabPage> GetFirstOne()
{
using (MCMDataContext db = new MCMDataContext())
{
MCM.User user = new MCM.User();
var firstone = (from oneUser in db.Users
where oneUser.ID == user.ID
select oneUser).Single();
return firstone.ToList();
}
}
Run Code Online (Sandbox Code Playgroud)
以下是我目前在应用程序中使用的库.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Microsoft.Win32;
using MahApps.Metro.Controls.Dialogs;
using System.IO;
using System.Data;
Run Code Online (Sandbox Code Playgroud)
如果需要任何图书馆,请在下面评论或发布答案.这是错误.
'MCM.User'不包含'ToList'的定义,也没有扩展方法'ToList'接受类型'MCM.User'的第一个参数(你是否缺少using指令或汇编引用?)如果你知道任何答案,请在下面发布.谢谢.
我在使用Razor视图的ASP.NET MVC3项目中使用Linq to SQL.
我的L2S对象似乎在控制器/模型代码中工作正常; 我可以为我的相关对象引用和使用子类集合.但是,我无法在Razor视图中这样做.Intellisense识别子类集合:
Model.ChildObjects
Run Code Online (Sandbox Code Playgroud)
但它无法为ChildObjects对象本身提供任何代码完成.尝试将集合用作集合,如下所示:
foreach(var item in Model.ChildObjects)
Run Code Online (Sandbox Code Playgroud)
导致编辑器中出现以下内联错误:
foreach statement cannot operate on variables of type
System.Data.Linq.EntitySet<ChildObjectType> because
System.Data.Linq.EntitySet<ChildObjectType> does not
contain a public definition for 'GetEnumerator'
Run Code Online (Sandbox Code Playgroud)
从Razor视图中引用的内容似乎有些不对劲.当我尝试使用这样的代码时:
@Model.ChildObjects.Count()
Run Code Online (Sandbox Code Playgroud)
我执行时遇到此编译错误:
The type 'System.Data.Linq.EntitySet`1<T0>' is defined in an assembly that is
not referenced. You must add a reference to assembly
'System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.
Run Code Online (Sandbox Code Playgroud)
我没有更改web.config项目文件中的任何内容.我最近更新了我的Windows 7到SP1,并更新了我的NuGet ...但我不确定是否会有任何涉及的内容.
我在SQL中有以下查询:
SELECT TOP 1 *
FROM sessions
ORDER BY start_time
Run Code Online (Sandbox Code Playgroud)
我应该如何在LINQ-to-SQL中对其进行编码
linq-to-sql ×13
c# ×11
linq ×8
.net ×3
sql-server ×2
asp.net ×1
asp.net-mvc ×1
c#-4.0 ×1
sql ×1
wpf ×1