为什么...
Func<IQueryable<CampaignCodePaths>> table = () => CampaignCodePaths;
Func<CampaignCodePaths, int> propertySelector = e => e.Id;
int key = 1;
Func<CampaignCodePaths, bool> whereSelector = e => propertySelector(e).Equals(key);
table().Where(whereSelector).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
......工作但......
Func<IQueryable<CampaignCodePaths>> table = () => CampaignCodePaths;
Func<CampaignCodePaths, int> propertySelector = e => e.Id;
int key = 1;
table().Where(e => propertySelector(e).Equals(key)).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
...返回异常:
方法'System.Object DynamicInvoke(System.Object [])'没有支持的SQL转换
?
UPDATE
澄清:
CampaignCodePath Get(Func<IQueryable<CampaignCodePaths>> table, Func<CampaignCodePaths, int> selector, int key)
{
return table().Where(/*How to I create this expression from selector and key? */).FirstOrDefault();
}
...
Get(() => CampaignCodePaths, …Run Code Online (Sandbox Code Playgroud) 在过去,我们的开发团队决定创建一个新的企业应用程序,并决定使用"Linq to SQL",因为实体框架"糟透了".(不是我的意见!)他们使用Visual Studio 2008,EF不是默认设置的一部分,但需要额外的插件.因此决定使用Linq to SQL来访问数据库.因此,我们现在围绕一个包含DBML和L2SQL实体的datamodule类库有多个项目......
现在很明显,这些开发人员错了.一些人转移到其他公司,一些新的公司被包括在这个项目中.(包括我.)我们想要使用实体框架.最好是带有.NET 4.0的版本4 ......这将使我们对数据更加灵活,我们希望在几个实体中包含一些继承,使代码更易于阅读和更好用.
那么,如何从"Linq to SQL"迁移到Entity Framework 4而无需重写我们的大部分代码?
我有一个通用的存储库就像那样
public class Repository<T> : IRepository<T> where T: class
{
DataContext _db;
public Repository()
{
_db = new DataContext("connection string");
}
System.Data.Linq.Table<T> GetTable
{
get { return _db.GetTable<T>(); }
}
public T GetBy(Func<T, bool> exp)
{
return GetTable.SingleOrDefault(exp);
}
....
}
Run Code Online (Sandbox Code Playgroud)
是否可以向此存储库添加通用方法以检查是否存在任何类似的实体:
public bool IsExisted(T entity)
{
...
}
Run Code Online (Sandbox Code Playgroud)
很容易在任何存储库中编写它
_productRepository.GetBy(p => p.Id == 5 // or whatever);
Run Code Online (Sandbox Code Playgroud)
其中productRepository如下:
public class ProductRepository : Repository<Product>
{
public ProductRepository()
: base()
{
}
}
Run Code Online (Sandbox Code Playgroud)
我来到这里因为我总是想检查实体的存在,所以我不需要在所有存储库中编写相同的方法.
c# generics domain-driven-design repository-pattern linq-to-sql
与SQL MIN函数相当的C#LINQ是什么?
我想将以下SQL转换为LINQ:
Select MIN(dbo.Orders.OrderTimestamp) as MinimumTimeStamp From dbo.Orders;
Run Code Online (Sandbox Code Playgroud)
谢谢
乔
当试图用entityframework查询我的数据库时,我得到以下错误:类型'System.Collections.Generic.IEnumerable 1[[TASK.Warehouses.Domain.NoteProducts.NoteProduct, TASK.Warehouses.Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' is not a single implementation of 'System.Collections.Generic.ICollection1 [T]' 的导航属性.可能是什么问题,我怎么能解决它
linq linq-to-entities frameworks linq-to-sql entity-framework-4
这是一个简单的问题,但我完全迷失了如何处理这个问题.
CREATE TABLE Contract (
id int PRIMARY KEY,
batchId int NOT NULL REFERENCES ContractBatch (id)
campaignId int NULL REFERENCES Campaign (id)
)
Run Code Online (Sandbox Code Playgroud)
这是我的商业模型中的简化表,是针对Linq2Sql模型的.现在我需要像这样做更新查询:
UPDATE Contract SET campaignId = 1 WHERE batchId = 5
Run Code Online (Sandbox Code Playgroud)
这意味着,可以有更多的记录ContractBatch,我需要Campaign为所有记录设置.有可能以一种简单的方式将此查询转换为Linq表达式吗?我能找到的唯一方法是获取所有那些记录,ContractBatch然后逐个循环更新.那不是很有效率.
var campaignId = 1;
var batchId = 5;
using( var dataContext = new DataModel.ModelDataContext() ) {
dataContext.Contracts
.Where( c => c.BatchId == batchId )
// this is obviously my "wish to have" method
.ForEach( c => c.CampaignId = campaignId …Run Code Online (Sandbox Code Playgroud) 我想创建一个LINQ查询,导致以下SQL语句.假设我有一个只有两个字符字段的简单表 - field1和field2.我的SQL语句是:
SELECT field1, field2, field1+field2 AS ConcatField
FROM TableX
WHERE field1+field2 = 'abcdef'
Run Code Online (Sandbox Code Playgroud)
如何在LINQ中完成?
我正在使用带有c#的MVC3,我试图从我的模型中获得以下百分比:
我检索数字:
... Code omitted
AgeGroup = g.Key.AgeGroup,
Count = (int)g.Count(),
Total = (int)
(from vw_masterview0 in ctx.vw_MasterViews
select new
{
vw_masterview0.ClientID
}).Count()
... Code omitted
Run Code Online (Sandbox Code Playgroud)
我需要划分:
百分比=计数/总计*100
我不知道如何在Linq格式化这个.
我试图找到最有效的方法来获取LINQ中连接表中的最新记录.
此查询可能会处理数千条记录,因此我不想执行子查询.
我需要来自项目的所有内容,但只需要来自"Notes"表的最新日期,其字段名称为SubmittedDate.
var items = (from t1 in db.Items
from t2
in db.Notes
.Where(o => (t1.Item_ID == o.Item_ID))
select new ItemModel
{
Name = t1.Name,
MostRecentUpdate = t2.SubmittedDate <== Need max value in model
});
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
我有一个以var LinqQuery开头的LINQ查询.但我想将LinqQuery放在if语句中,因此它的过程是某些属性为null或不为null.我需要在if语句之外设置var LinqQuery,因为我有代码循环通过LinqQuery.它是否在if语句之外初始化var LinqQuery.像var LinqQuery = string.Empty这样的东西?
var lQuery = (from a in gServiceContext.CreateQuery("account")
where (a["name"].Equals(lLead.AccountName) &&
a["address1_postalcode"].Equals(lLead.ZipCode) &&
a["address1_stateorprovince"].Equals(lLead.State)) ||
(a["address1_line1"].Equals(lLead.Address1) &&
a["address1_postalcode"].Equals(lLead.ZipCode) &&
a["address1_city"].Equals(lLead.City))
select new
{
Name = !a.Contains("name") ? string.Empty : a["name"],
City = !a.Contains("address1_city") ? string.Empty : a["address1_city"],
State = !a.Contains("address1_stateorprovince") ? string.Empty : a["address1_stateorprovince"],
Zip = !a.Contains("address1_postalcode") ? string.Empty : a["address1_postalcode"],
AccountId = !a.Contains("accountid") ? string.Empty : a["accountid"]
});
Run Code Online (Sandbox Code Playgroud)
谢谢!