我在数据库表中有一个字符串列,它在代码中映射到枚举.在我的dbml文件中,当我将"类型"设置为时,MyTypes.EnumType我收到以下错误:
错误1 DBML1005:不支持类型'Table1'的列'EnumCol'中的DbType'VarChar(50)NOT NULL'和类型'MyTypes.EnumType'之间的映射.
这个问题: LINQ to SQL字符串到枚举 表明我想要做的是可能的,但它是如何完成的?
我想找到一个最快的方法来获得一个表中的列的最小值和最大值,其中只有一个Linq to SQL往返.所以我知道这将在两个往返中起作用:
int min = MyTable.Min(row => row.FavoriteNumber);
int max = MyTable.Max(row => row.FavoriteNumber);
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用,group但我没有group by条款,我想聚合整个表格!如果没有分组,我就不能使用.Min.我试过这个:
from row in MyTable
group row by true into r
select new {
min = r.Min(z => z.FavoriteNumber),
max = r.Max(z => z.FavoriteNumber)
}
Run Code Online (Sandbox Code Playgroud)
但是这个疯狂的组子句似乎很愚蠢,而它所做的SQL比它需要的更复杂.
那么,有没有办法只是得到正确的SQL?
编辑:这些家伙也失败了:Linq to SQL:如何在没有小组的情况下聚合?......如果真的没有答案,LINQ设计师的疏忽.
编辑2:我在SQL Server Management Studio执行计划分析中查看了我自己的解决方案(使用无意义的常量group by子句),它在我看来它与生成的计划完全相同:
SELECT MIN(FavoriteNumber), MAX(FavoriteNumber)
FROM MyTable
Run Code Online (Sandbox Code Playgroud)
因此,除非有人能够提出一个更简单或同样好的答案,我想我必须将其标记为自己回答.思考?
我在数据访问对象库中使用LINQ to SQL.该库用于Web(Web应用程序/ Web服务)和非Web(Windows服务)上下文.最初,我存储了DataContext当前,HttpContext因为它允许我管理一个相当小的工作单元(一个Web请求)并避免Web应用程序中的全局对象.显然,这在Windows服务中不起作用.
Rick Strahl有一篇关于管理DataContext生命的好文章:http://www.west-wind.com/weblog/posts/246222.aspx.不幸的是,我无法决定最好的方法.一个全球性DataContext的,他提到的原因不能正常工作,每个线程DataContext看起来很复杂,而且可能更麻烦比它的价值,并为每个对象实例似乎挑剔-你失去了一些优雅当您将DataContext用来创建一个DAO到DAO,因此可以update或delete稍后 - 更不用说,这种关系有一些不愉快的鸡肉和蛋白.
有没有人有个人经验表明一种方法比另一种更好?或者更好的是,有没有人有第四种或第五种方法,我没有看到?存储和管理您的最佳位置在哪里DataContext?
如何使用linq从连接中的表中选择所有列
SQL:
select CTRL_RUN_JOB.*, CTRL_DATA_STREAM.*
from CTRL_RUN_JOB inner join CTRL_DATA_STREAM
on CTRL_RUN_JOB.DATA_STREAM_ID= CTRL_DATA_STREAM.DATA_STREAM_ID
Run Code Online (Sandbox Code Playgroud)
LINQ:
from CTLJCRJOB in CTRL_RUN_JOBs
join CTLRFDSTM in CTRL_DATA_STREAMs
on CTLJCRJOB.DATA_STREAM_ID equals CTLRFDSTM.DATA_STREAM_ID
select new {
CTLJCRJOB.* // ???
,CTLRFDSTM.* // ???
}
Run Code Online (Sandbox Code Playgroud)
谢谢
我遇到了linq-to-sql的一个相当奇怪的问题.在以下示例中,
var survey = (from s in dbContext.crmc_Surveys
where (s.crmc_Retail_Trade_Id == tradeId) && (s.State_.Equals(state))
select s).First();
Run Code Online (Sandbox Code Playgroud)
如果tradeId为null,则其行为不像我特意指定null那样,
var survey = (from s in dbContext.crmc_Surveys
where (s.crmc_Retail_Trade_Id == null) && (s.State_.Equals(state))
select s).First();
Run Code Online (Sandbox Code Playgroud)
这是我想要的行为.事实上,除非两个值都为非null,否则它不会返回任何内容.我无法弄清楚如何完成这几个不同的linq查询.有任何想法吗?
假设您在LINQ类中定义了以下实体:
Product
Customer
Category
Run Code Online (Sandbox Code Playgroud)
我应该为所有人拥有一个存储库类:
StoreRepository
Run Code Online (Sandbox Code Playgroud)
......或者我应该:
ProductRepository
CustomerRepository
CategoryRepository
Run Code Online (Sandbox Code Playgroud)
每个人的利弊是什么?就我而言,我的解决方案中有几个"应用程序"...... Store应用程序只是其中之一.
使用LINQ通过Where忽略重音和大小写的方法过滤元素的最简单方法是什么?
到目前为止,我已经能够通过调用属性上的方法来忽略Casing,我认为这不是一个好主意,因为它为每个元素调用相同的方法(对吧?).
所以这就是我到目前为止所得到的:
var result = from p in People
where p.Name.ToUpper().Contains(filter.ToUpper())
select p;
Run Code Online (Sandbox Code Playgroud)
请告诉我这是不是一个好习惯,也是忽略重音的最简单方法.
我目前正在解决一个问题,我想运行一个查询,按所选日期对结果进行分组.
对于这个例子,想象一个像这样的简单模型:
public class User
{
public DateTime LastLogIn {get; set;}
public string Name {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找的解决方案是获取按日期登录的用户数.在数据库中,DateTime与日期和时间组件一起存储,但对于此查询,我真的只关心日期.
我现在拥有的是:
context.Users
.Where((x.LastLogIn >= lastWeek)
&& (x.LastLogIn <= DateTime.Now))
.GroupBy(x => EntityFunctions.TruncateTime(x.LastLogIn))
.Select(x => new
{
Value = x.Count(),
Day = (DateTime)EntityFunctions.TruncateTime(x.Key)
}).ToList();
Run Code Online (Sandbox Code Playgroud)
然而,上面返回一个空列表.
最终目标是拥有一个对象列表,其中包含一个值(一天登录的用户数)和一天(相关日期)
有什么想法吗?
将查询更改为:
context.Users
.Where((x.LastLogIn >= lastWeek)
&& (x.LastLogIn <= DateTime.Now))
.GroupBy(x => EntityFunctions.TruncateTime(x.LastLogIn))
.Select(x => new
{
Value = x.Count(),
Day = (DateTime)x.Key
}).ToList();
Run Code Online (Sandbox Code Playgroud)
它现在返回一个包含单个项目的列表,其中Value是与where子句匹配的Users总数,而Day是第一天.它似乎仍然没有能够分组
注意:结果是上面的代码是对的,我只是做了别的错误.
它生成的Sql是(注意这里可能是非常轻微的语法错误,我为此调整它):
SELECT
1 AS [C1],
[GroupBy1].[A1] AS [C2],
CAST( [GroupBy1].[K1] …Run Code Online (Sandbox Code Playgroud) 这是查询
from a in this._addresses
where a.Street.Contains(street) || a.StreetAdditional.Contains(streetAdditional)
select a).ToList<Address>()
Run Code Online (Sandbox Code Playgroud)
如果where子句中的两个属性都有值,这可以正常工作,但是如果例如a.StreetAdditional为null(大多数时候),我将得到一个空引用异常.
有没有解决这个问题?
谢谢,
可能重复:
多元化 - Singularize
C#4.0(可能是旧版本,但我只用4.0测试过)Linq-to-SQL生成器会使你的表名多元化; 甚至像Territory这样的复数复数.它知道领土是复数.反正有没有访问这个复数函数?
linq-to-sql ×10
c# ×7
linq ×5
.net ×3
asp.net ×1
asp.net-mvc ×1
filtering ×1
pluralize ×1
sql ×1