就在我与LINQ to SQL交朋友时,似乎MS正在从它下面拉出地毯.
从我的一点点研究来看,EF对简单的工作来说太过分了.但是在这个公告之后是否有继续使用LINQ to SQL的意义?
超越LINQ to SQL的未来,这不仅仅是发送一个糟糕的信号吗?鉴于MS在墙上投掷比特的速度,早期使用任何新比特是否合理?(而且这很好,LINQ to SQL几乎不早!).
对于我的LINQ to SQL工作,我想我会去SubSonic!
更新:一些新意见:
http://ayende.com/Blog/archive/2008/10/31/microsoft-kills-linq-to-sql.aspx
我有一个函数,我得到一个id列表,我需要返回一个匹配与id相关的描述的列表.例如:
public class CodeData
{
string CodeId {get; set;}
string Description {get; set;}
}
public List<CodeData> GetCodeDescriptionList(List<string> codeIDs)
//Given the list of institution codes, return a list of CodeData
//having the given CodeIds
}
Run Code Online (Sandbox Code Playgroud)
因此,如果我自己创建sql,我会简单地执行以下操作(其中in子句包含codeIds参数中的所有值):
Select CodeId, Description FROM CodeTable WHERE CodeId IN ('1a','2b','3')
Run Code Online (Sandbox Code Playgroud)
在Linq to Sql中我似乎无法找到相当于"IN"的子句.到目前为止我发现的最好(不起作用)是:
var foo = from codeData in channel.AsQueryable<CodeData>()
where codeData.CodeId == "1" || codeData.CodeId == "2"
select codeData;
Run Code Online (Sandbox Code Playgroud)
问题是,我无法动态生成linq到sql的"OR"子句列表,因为它们是在编译时设置的.
如何使用Linq to Sql完成检查列的where子句在动态值列表中?
写入数据库时出现此错误:
ReferentialConstraint中的依赖属性映射到存储生成的列.栏目:'PaymentId'.
public bool PayForItem(int terminalId, double paymentAmount,
eNums.MasterCategoryEnum mastercategoryEnum, int CategoryId, int CategoryItemId)
{
using (var dbEntities = new DatabaseAccess.Schema.EntityModel())
{
int pinnumber = 0;
long pinid = 1; //getPinId(terminalId,ref pinnumber) ;
var payment = new DatabaseAccess.Schema.Payment();
payment.CategoryId = CategoryId;
payment.ItemCategoryId = CategoryItemId;
payment.PaymentAmount = (decimal)paymentAmount;
payment.TerminalId = terminalId;
payment.PinId = pinid;
payment.HSBCResponseCode = "";
payment.DateActivated = DateTime.Now;
payment.PaymentString = "Payment";
payment.PromotionalOfferId = 1;
payment.PaymentStatusId = (int)eNums.PaymentStatus.Paid;
//payment.PaymentId = 1;
dbEntities.AddToPayments(payment);
dbEntities.SaveChanges();
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
架构是:

在使用LINQ to SQL连接(针对SQL Server Compact Edition)更新一些属性后,在向DataContext执行SubmitChanges时,我得到"未找到或更改行".ChangeConflictException.
var ctx = new Data.MobileServerDataDataContext(Common.DatabasePath);
var deviceSessionRecord = ctx.Sessions.First(sess => sess.SessionRecId == args.DeviceSessionId);
deviceSessionRecord.IsActive = false;
deviceSessionRecord.Disconnected = DateTime.Now;
ctx.SubmitChanges();
Run Code Online (Sandbox Code Playgroud)
该查询生成以下SQL:
UPDATE [Sessions]
SET [Is_Active] = @p0, [Disconnected] = @p1
WHERE 0 = 1
-- @p0: Input Boolean (Size = 0; Prec = 0; Scale = 0) [False]
-- @p1: Input DateTime (Size = 0; Prec = 0; Scale = 0) [9/4/2008 5:12:02 PM]
-- Context: SqlProvider(SqlCE) Model: AttributedMetaModel Build: 3.5.21022.8
Run Code Online (Sandbox Code Playgroud)
显而易见的问题是WHERE 0 …
表:
id userid friendid name status
1 1 2 venkat false
2 1 3 sai true
3 1 4 arun false
4 1 5 arjun false
Run Code Online (Sandbox Code Playgroud)
如果用户发送userid = 1,则friendids = 2,4,5 status = true
请告诉我如何更新以上所有friendids状态的查询是真的.[2,3,4一次].?
谢谢
我正在运行数据导入(使用C#/ Linq),当然我正在尝试尽可能优化我的查询.为此,我正在使用SQL Server Profiler在数据库上运行跟踪,我的跟踪由我的SQL登录名过滤(这是一个可以唯一归因于我的数据导入过程的名称).
奇怪的是,我的大多数SQL语句都非常快:) - 很少有查询甚至突破1ms标记.但是我的所有查询之间的间隔是几行,其中EventClass是"审核登录"或"审核注销" - 并且"审核注销"的持续时间可以长达一分钟!
这与我在导入中使用事务的事实有关吗?如果是这样,有没有办法找到哪些是重要的查询,所以我可以清理它们?
我们正在研究日志查看器.该用户可以选择按用户,严重程度等进行过滤.在Sql中我会添加到查询字符串,但我想用Linq来做.我怎样才能有条件地添加where-clause?
我有这样的查询
(from u in DataContext.Users
where u.Division == strUserDiv
&& u.Age > 18
&& u.Height > strHeightinFeet
select new DTO_UserMaster
{
Prop1 = u.Name,
}).ToList();
Run Code Online (Sandbox Code Playgroud)
我想根据是否将这些条件提供给运行此查询的方法来添加各种条件,如年龄,高度.所有条件都包括用户部门.如果提供了年龄,我想将其添加到查询中.同样,如果提供了高度,我也想添加它.
如果要使用sql查询完成,我会使用字符串构建器将它们附加到主strSQL查询.但是在Linq中,我只能想到使用IF条件,其中我将编写相同的查询三次,每个IF块都有一个附加条件.有一个更好的方法吗?
谢谢你的时间..
我在LINQ中寻找一种方法来匹配后面的SQL查询.
Select max(uid) as uid, Serial_Number from Table Group BY Serial_Number
Run Code Online (Sandbox Code Playgroud)
真的在寻找这方面的一些帮助.由于Group By语法,上面的查询获取每个序列号的最大值.
要删除表中的所有行,我目前正在执行以下操作:
context.Entities.DeleteAllOnSubmit(context.Entities);
context.SubmitChanges();
Run Code Online (Sandbox Code Playgroud)
然而,这似乎需要很长时间.有更快的方法吗?