假设我有一个包含四列的DataTable,Company(字符串),Fund(字符串),State(字符串),Value(double):
table1.Rows.Add("Company 1","Fund 1","NY",100));
table1.Rows.Add("Company 2","Fund 1","CA",200));
table1.Rows.Add("Company 3","Fund 1","FL",300));
table1.Rows.Add("Company 4","Fund 2","CA",400));
table1.Rows.Add("Company 5","Fund 1","NY",500));
table1.Rows.Add("Company 6","Fund 2","CA",600));
table1.Rows.Add("Company 7","Fund 3","FL",700));
Run Code Online (Sandbox Code Playgroud)
我想使用System.LINQ.Dynamic构建一个动态查询,该查询在公司,基金或州上分组,然后按条件选择我的组作为第一列,并且sum(value):
string groupbyvalue="Fund";
var q1= table1.AsEnumerable().AsQueryable()
.GroupBy(groupbyvalue,"it")
.Select("new ("+groupbyvalue+" as Group, Sum(Value) as TotalValue)");
Run Code Online (Sandbox Code Playgroud)
在上面的查询中,所选的groupbyvalue(Group)将始终是一个字符串,并且总和将始终为double,因此我希望能够转换为类似List的内容,其中Result是具有属性Group的对象(字符串) )和TotalValue(双).
我遇到很多麻烦,有人可以解决这个问题吗?
我想用不同的密钥搜索我的数据库.根据输入,10键可能有1个键.有没有办法动态地向我的Linq查询添加OR/AND子句?
keys[k] // I have my keys in this array
var feedList = (from feed in ctx.Feed
where feed.content.contains(keys[0])
&& feed.content.contains(keys[1])
&& ... // continues with the keys.length
select new {
FeedId = feed.DuyuruId,
FeedTitle = feed.FeedTitle,
FeedContent = feed.FeedContents,
FeedAuthor = user.UserName + " " +User.UserSurname
}
Run Code Online (Sandbox Code Playgroud) 我试图通过MVC 5/Entity Framework 6应用程序中的Linq表达式使用DateDiff SQL语法获取今天添加的所有记录.DateDiff函数抛出运行时错误
实际上我想用以下linq WHERE子句来解析linq动态
.Where(p => DbFunctions.DiffDays(p.added_date, DateTime.Now) == 0)
Run Code Online (Sandbox Code Playgroud)
为了获取今天添加的记录.我正在使用的示例代码如下所示
var _list = new vsk_error_log();
using (var entities = new vskdbEntities())
{
_list = entities.vsk_error_log
//.Where("DateDiff(DAY,added_date,getdate())=0")
.Where(p => DbFunctions.DiffDays(p.added_date, DateTime.Now) == 0)
.ToList();
}
return _list;
Run Code Online (Sandbox Code Playgroud)
关于Linq.Dynamic表达式 - 如何编写where子句
我有带有用户定义过滤器的表单(带有列名的组合框、带有过滤器类型的组合框和带有值的文本框)。
如何将用户定义的过滤器动态添加到 LINQ 查询中?
典型的查询如下所示:
var qProducts = from p in db.Products
where p.IsArchived == false
order by p.ProductName select p;
Run Code Online (Sandbox Code Playgroud)
我正在使用 LINQ(IQuerable Toolkit)来访问 SQL CE 数据库中的数据。
我很难解决这个问题,需要在C#,asp.net中创建动态linq查询的代码.我有5个下拉列表,它搜索同一数据库表中的不同列,并将项目筛选值返回到单个列表框.问题是没有序列在DDL中选择了哪个或全部或任何一个,但组合的过滤结果应显示在列表框中.我有一个工作查询,分别在每个DDL选择中一次搜索并返回结果.必须在AND中添加where子句以动态地向此查询添加其他DDL选择.谢谢
public ListItemCollection searchProject(ListItemCollection projList, String searchstr, String columnName)
{
DataSet DSToReturn = new DataSet();
ListItemCollection returnItems = new ListItemCollection();
DataTable results = (from d in ((DataSet)_MyDataset).Tables["Records"].AsEnumerable()
orderby d.Field<string>("Name") ascending
where (d.Field<string>(columnName) != null)
where d[columnName].ToString().ToLower().Contains(searchstr.ToLower())
select d).CopyToDataTable();
foreach (ListItem li in projList)
{
if ((from System.Data.DataRow row in results.Rows
where li.Value.Equals(row["value"].ToString(), StringComparison.InvariantCultureIgnoreCase)
select row["value"]).Count() > 0)
returnItems.Add(li);
}
return returnItems;
}
Run Code Online (Sandbox Code Playgroud) 我已经安装了System.Linq.Dynamicdll然后尝试在Linq中添加字符串作为WHERE子句的参数.但我仍然得到WHERE子句支持字符串参数的错误.
码:
_dbContext.TmRecords.Where("city=london");
Run Code Online (Sandbox Code Playgroud)
错误:
严重级代码描述项目文件行错误CS1503参数2:无法从'string'转换为'System.Linq.Expressions.Expression>'Extranet.Domain
这里city参数动态地改变为其他参数.所以,我需要在linq中使用动态查询.
如果我必须根据是否存在不同的参数进行不同的数据库查询,那将是避免使用不同组合使用过多if-else的正确设计模式?假设我有参数a,b,c(将来数量可能会增加),我使用的是存储库,因此我必须像这样进行调用
public Foo getFoo(String a, String b, String c){
Foo foo;
if(a!=null && !a.isEmpty() && b!=null && !b.isEmpty() && c!=null && !c.isEmpty())
foo = repository.findByAAndBAndC(a,b,c);
if((a==null || a.isEmpty()) && b!=null && !b.isEmpty() && c!=null && !c.isEmpty())
foo = repository.findByBAndC(b,c);
if((a!=null && !a.isEmpty()) && (b==null || b.isEmpty()) && c!=null && !c.isEmpty())
foo = repository.findByAAndC(a,c);
if((a==null || a.isEmpty()) && (b==null || b.isEmpty()) && !b.isEmpty() && c!=null && !c.isEmpty())
foo = repository.findByC(c);
if((a==null || a.isEmpty()) && (b==null || b.isEmpty()) && !b.isEmpty() && (b==null …Run Code Online (Sandbox Code Playgroud)