0

私は2つのテーブルを持っています。1 にはエンティティがあり、行ごとに 1 つです。もう 1 つは、単に EntitiesID と EmployeeID のマッピング テーブルです。EntityID が EmployeeID によってフィルター処理されたマッピング テーブルにある最初のテーブルからすべてのエンティティを返す LINQ メソッドを作成しようとしています。

簡略化されたテーブル構造の例 TaskTable: ID, Description, Status TaskViewTable: ID, TaskID, EmployeeID

したがって、ID が EmployeeID に基づく TaskViewTable のサブクエリ結果にある TaskTable からすべての行を返したいと思います。

LINQでこれを行う上で何か助けはありますか? 2 つのテーブル間にも 1 対多を設定しています。同様の質問があることは知っていますが、私が密集している可能性がありますが、私が求めていたものに完全には当てはまらないようです.(例: Linq Return Filtered Children )

申し訳ありませんが、私がこれまでに持っているものを表示するのを忘れていました:

IQueryable<tblTask> tTask=context.GetTable<tblTask>();
return tTask.Where(t => t.tblTasksViews.Where(v => v.EmployeeID == empID))

whereしかし、それは私の好きではありませんunkown method Where(?)

4

2 に答える 2

1

このような何かがうまくいくはずです:

var tasks = tTask.Where(t => 
    tTaskView.Where(v => v.ID == empId).Select(v => v.TaskId).Contains(t.ID));

上記を 2 つのセクションに分けることができます。

//1.) Get all task views for the employeeID and only select the mapped TaskId
var taskViews = tTaskView.Where(v => v.ID == empId).Select(v => v.TaskId); //taskViews = IEnumerable<int>

//2.) Then get all tasks from the filtered task ids  
var tasks = tTask.Where(t => taskViews.Contains(t.ID));

アップデート

//3.) Project filtered results into IEnumerable<Task>
return tasks.Select(t => new Task() 
{ 
    ID = t.ID, 
    ActionableID = t.ActionableID, 
    StatusID = t.StatusID, 
    TypeID = t.TypeID, 
    Description = t.Description 
});

もちろん、すべてを素敵なワンライナーに文字列化することもできます:

public List<Task> GetTasks(int empId) 
{
    return tTask
        .Where(t => tTaskView.Where(v => v.ID == empId).Select(v => v.TaskId).Contains(t.ID))
        .Select(t => new Task() 
        { 
            ID = t.ID, 
            ActionableID = t.ActionableID, 
            StatusID = t.StatusID, 
            TypeID = t.TypeID, 
            Description = t.Description 
        }).ToList();
}
于 2012-07-10T06:20:29.797 に答える
1

次のようなことを試してください:

var query =
    from tt in TaskTable
    join tvt in TaskViewTable on tt.ID equals tvt.TaskID into xs
    where xs.Any(z => z.EmployeeID == empID)
    select tt;
于 2012-07-10T05:39:21.447 に答える